c++ - 树遍历不打印正确的顺序

标签 c++ tree traversal insertion

我用 C++ 中的类创建了一个二叉树。我的插入函数是非递归的,如下所示:

bool Tree1::inOrderInsert(int x)
{
    TreeNode *parent = NULL;
    TreeNode *temp = root;
    TreeNode *newNode = new TreeNode(x);

    if (root == NULL)
    {
        root = newNode;
        //cout << "Root empty!" << endl;
        return true;
    }

    while (temp != NULL)
    {
        if (x <= temp->value)
        {
            parent = temp;
            temp = temp->left;
        }
        else
        {
            parent = temp;
            temp = temp->right;
        }
    }

    if (x <= parent->value)
    {
        parent->left = newNode;
        return true;
    }
    else
    {
        parent->right = newNode;
        return true;
    }
}

我使用此函数使用后序遍历遍历并打印树:

void Tree1::postOrderPrintRec(TreeNode *node)
{
    if (node != NULL)
    {
        preOrderPrintRec(node->left);
        preOrderPrintRec(node->right);
        cout << "Value: " << node->value << endl;
    }
}

我像这样在 main 中插入和打印值:

tree1.inOrderInsert(5);
tree1.inOrderInsert(3);
tree1.inOrderInsert(2);
tree1.inOrderInsert(4);
tree1.inOrderInsert(6);
tree1.inOrderInsert(7);
tree1.postOrderPrintRec(tree1.getRoot()); 

我在运行代码时应该看到的值如下: 值(value):2 值:4 值(value):3 值(value):7 值(value):6 值(value):5

但是,我看到了这个: 值(value):3 值(value):2 值:4 值(value):6 值(value):7 值(value):5

谁能告诉我为什么它以错误的顺序打印出值?

最佳答案

您正在 postOrderPrintRec() 函数中调用 preOrderPrintRec()。这意味着您只在树的顶层进行后序遍历。改为调用 postOrderPrintRec(),我认为这会解决问题。

关于c++ - 树遍历不打印正确的顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28204050/

相关文章:

c++ - 如何检测是否可以激活附加处理

python - Python中的线段树实现

serialization - 面试题——序列化和反序列化n叉树

javascript - 在特定元素之后获取具有特定类的下一个元素

java - 执行缓慢并且耗尽堆空间(即使 vm args 设置为 2g)

python - 如何通过键列表导航字典?

c++ - Thread Building Blocks 流程图 — 类似 limiter_node 的东西,不会丢弃消息

c++ - 使用 &front() 修改 std::string 中的底层字符数组

C++ 通用 int 数组和 vector 迭代器

python - 使用过滤器检索图形最低高度节点