如果我们要在左子树中找到节点,甚至在根节点上找到节点,它会给出正确的输出但是如果我们在右边的任何节点上说root->右边,即节点70它给出错误的输出20 30 40 50 60.我知道我在哪里犯了错误我应该如何修改代码,以便输入70只剩下子树,即打印节点60.
void In(struct node *root1,struct node*root2)
{
if (root1 != NULL)
{
In(root1->left,root2);
if(root1->key==root2->key)
exit(0);
else
printf("%d ", root1->key);
In(root1->right,root2);
}
}
int main()
{
/* Let us create following BST
50
/ \
30 70
/ \ / \
20 40 60 80 */
struct node *root = NULL;
root = insert(root, 50);
insert(root, 30);
insert(root, 20);
insert(root, 40);
insert(root, 70);
insert(root, 60);
insert(root, 80);
// print inoder traversal of the BST
inorder(root);
printf("\n");
In(root,root->right);
return 0;
}
答案 0 :(得分:0)
只需对左侧孩子进行有序遍历。
void In( struct node *root1, struct node *root2 )
{
if ( root1 != NULL && root2 != NULL )
{
if ( root1 -> key == root2 -> key)
exit(0);
inorder( root2 -> left );
}
}