致敬社区
这是一个概念性问题,所以请耐心等待。
由于二叉树的转换和操作顺序中的多个递归实例,我对以下算法感到困惑。我正在使用 以预购算法为例。
继承代码。
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的整个概念以及递归和其他算法如何有效地使用它们。看起来像一个神秘的过程,但至少可以说是令人着迷的。
答案 0 :(得分:1)
一张图片胜过千言万语:这是在预订时对每一步进行编号时发生的:
1
/ \
2 9
/ \ \
3 4 10
\
5
/ \
6 7
/
8