给定二叉树,遍历左子树

时间:2015-02-24 13:47:42

标签: binary-tree

如果我们要在左子树中找到节点,甚至在根节点上找到节点,它会给出正确的输出但是如果我们在右边的任何节点上说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;
}

1 个答案:

答案 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 );  
    }
}