Java 二叉搜索树中顺序遍历的澄清

Java 二叉搜索树中顺序遍历的澄清,java,algorithm,recursion,tree,Java,Algorithm,Recursion,Tree,我正在研究Java中的树,在我正在学习的书中遇到了一些令人困惑的行。顺序遍历图如下所示: 遍历(递归)的代码是: 我感到困惑的是: 现在我们回到顺序(A),刚刚从A的左边返回 小孩我们访问A,然后再次调用inoder(),并将C作为参数, 创建索引(C)。和索引(B)一样,索引(C)没有子项,所以 步骤1返回时不执行任何操作,步骤2访问C,步骤3返回 没有行动顺序(B)现在返回顺序(A) 但是,, inOrder(A)现在完成了,因此它返回,并且整个遍历过程都完成了 完成节点的访问顺序为A、B

我正在研究Java中的树,在我正在学习的书中遇到了一些令人困惑的行。顺序遍历图如下所示:

遍历(递归)的代码是:

我感到困惑的是:

现在我们回到顺序(A),刚刚从A的左边返回 小孩我们访问A,然后再次调用inoder(),并将C作为参数, 创建索引(C)。和索引(B)一样,索引(C)没有子项,所以 步骤1返回时不执行任何操作,步骤2访问C,步骤3返回 没有行动顺序(B)现在返回顺序(A)

但是,, inOrder(A)现在完成了,因此它返回,并且整个遍历过程都完成了 完成节点的访问顺序为A、B、C;他们 我们已经被有序地参观过了。在二进制搜索树中,这将是 升序键的顺序

我已经强调了我所处的位置。首先,我认为在第三步中,inOrder(C)[而不是inOrder(B)]返回inOrder(A)。其次,节点的访问顺序应该是B->A->C


请帮帮我

是的,你在这两方面都是正确的。这些似乎是拼写错误或勘误表


作为旁注,我在你的帖子中认识到了图表风格,因为我几年前从同一本书(Lafore)中学习了数据结构。不幸的是,他似乎没有在任何地方发布勘误表,这令人失望,因为大多数作者都努力做到这一点。

因为System.out.println(localRoot.iData+);在第二行,这个打印(或访问)顺序应该是B->A->C。但真正的访问顺序是A->B->C。你在两个声明中都是正确的。@Shloim这是Robert Lafore的数据结构和算法,正如我在下面的回答中提到的。对于初学者来说这是一本相当不错的书,但我确实记得,在我学习这本书时,对没有出版勘误表感到沮丧。我只推荐这本书,让你继续学习。第二种说法不是错误。正如@RogerDwan所解释的,这本书所指的是A、B、C的访问顺序,而不是B、A、C的输出顺序。他清楚地指出,“他们是按顺序访问的。在二元搜索树中,这是升序键的顺序。”因此,要么他错了,要么他定义了“访问顺序”在同一句话中有两种不同的方式。如果图片和代码都来自于那本书,那么它应该被修复,因为图片和代码都在第二行显示它的“访问操作”。我想这就是为什么@Manish会感到困惑。我认为@Shloim是对的。在我看来,访问顺序应该是指遍历顺序,根据递归方法中定义的代码,它应该与输出顺序相同。或者访问顺序与遍历顺序不同?很好地找到了这一点。即使你不是在处理错误的句子,这个主题也够令人困惑的。
private void inOrder(Node leftRoot) {
    if (localRoot != null) {
        inOrder(localRoot.leftChild);
        System.out.println(localRoot.iData + " ");
        inOrder(localRoot.rightChild);
    }
 }