树遍历不打印正确的顺序
Tree Traversal not printing correct order
我在 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;
}
}
我使用post顺序遍历这个函数来遍历并打印树:
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());
我 运行 代码时应该看到的值如下:
价值:2
值:4
价值:3
价值:7
价值:6
值:5
但是,我看到了这个:
价值:3
价值:2
值:4
价值:6
价值:7
值:5
谁能告诉我为什么它以错误的顺序打印出值?
您正在 postOrderPrintRec()
函数中调用 preOrderPrintRec()
。这意味着您只在树的顶层执行 post 顺序遍历。改为调用 postOrderPrintRec()
,我认为这会解决问题。
我在 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;
}
}
我使用post顺序遍历这个函数来遍历并打印树:
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());
我 运行 代码时应该看到的值如下: 价值:2 值:4 价值:3 价值:7 价值:6 值:5
但是,我看到了这个: 价值:3 价值:2 值:4 价值:6 价值:7 值:5
谁能告诉我为什么它以错误的顺序打印出值?
您正在 postOrderPrintRec()
函数中调用 preOrderPrintRec()
。这意味着您只在树的顶层执行 post 顺序遍历。改为调用 postOrderPrintRec()
,我认为这会解决问题。