似乎无法绕过二进制搜索结束

时间:2017-11-02 01:31:48

标签: java algorithm recursion binary-search-tree

致敬社区

这是一个概念性问题,所以请耐心等待。

由于二叉树的转换和操作顺序中的多个递归实例,我对以下算法感到困惑。我正在使用 以预购算法为例。

继承代码。

1    public static void Preorder(Node node){
2    if (node == null)
3        return;
4    System.out.print(node.element + " ");
5    Preorder(node.left);
6    Preorder(node.right);
7 }

我很困惑的是,递归调用的命令链。 首先在第一个“迭代”的算法中,都是同时激活的预订方法。就像第5行和第6行的方法同时发生一样,没有“等待”另一个完成。

或者它更像是#6 Prerder()一直被调用直到基本案例被击中。 那么#7被调用直到其基数被击中?如果这是真的,如何到达子树左侧的所有正确节点,反之亦然?

假设你有这个,树(N =任意数字)

    N
   /  \ 
  N    N
 / \    \
 N  N    N
    \
     N
    /  \
   N    N
      /
     N

如果方法不断重复一个node.left参数,算法如何“到达”右子树上最右边的节点?看起来好像你只会得到最左边的节点而没有别的东西。

我仍然围绕nodes.left和nodes.right的整个概念以及递归和其他算法如何有效地使用它们。看起来像一个神秘的过程,但至少可以说是令人着迷的。

1 个答案:

答案 0 :(得分:1)

一张图片胜过千言万语:这是在预订时对每一步进行编号时发生的:

    1
   /  \ 
  2    9
 / \    \
3   4    10
    \
     5
    /  \
   6    7
      /
     8