微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

C ++如何将顺序遍历的节点存储到数组中?

如何解决C ++如何将顺序遍历的节点存储到数组中?

我有像这样的有序遍历功能


void Inorder(node *root)
{
    node* array;
    array = new node[arraySize];


    if (root == NULL)
        return;
    Inorder(root->left); //visit left sub-tree
    

    std::cout << "Word: " << root->key << std::endl
              << "Occurance: " << root->count << std::endl; //print root key and its count

    Inorder(root->right); //visit right sub-tree
    
}

为了对它进行进一步的排序,我需要将横向的节点存储在数组中,但是我不确定我能否做到这一点。视觉上我想要这样的东西

node array[0] = transversednode; 

我尝试将root添加到数组 我试过当Inorder的类型为node

时,将Inorder(root-> left)添加到数组中

但是这些都不满足我的需求。是否可以将交叉的节点存储到数组中?谢谢

解决方法

正如其他人已经评论过的那样,您可以将数组声明替换为std::vector<Node*>并返回:

void InorderRecursive(Node *root,std::vector<Node*>& nodes)
{
    if (root == NULL)
        return;

    InorderRecursive(root->left,nodes); //visit left sub-tree

    std::cout << "Word: " << root->key << std::endl
              << "Occurance: " << root->count << std::endl; //print root key and its count
    nodes.push_back(root);

    InorderRecursive(root->right,nodes); //visit right sub-tree
}

std::vector<Node*> Inorder(Node *root)
{
    std::vector<Node*> nodes;    
    InorderRecursive(root,nodes);
    return nodes;
}

我添加了一个附加函数InorderRecursive,该函数调用自身并由Inorder调用。它具有std::vector<Node*>引用作为附加参数。原始向量在Inorder中构造并传递。这样,您只有一个容器,可以避免复制整个内容。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。