缺少理解递归的链接在树遍历中



我大多以树木遍历为单位进行了递归编程,但是我的理解只有很小的差距,我想澄清。当第一个递归方法调用将节点指针一直移到左侧时,为什么存在无效节点会导致该方法停止在最后一个节点,然后移动递归调用并打印最后一个节点。我的一部分只能接受这就是发生的事情,但是我真正没有得到的就是为什么一旦您打印了最后一个左节点,为什么它会向右移动,就像对待最近打印的节点一样它处理空节点。在我看来,它会继续向左移动,好像一再撞墙。我不确定自己在解释我没有得到的内容的能力,如果不清楚,我会很乐意尝试重塑并使用图片。我认为树上的递归是非常标准的,尽管我知道有两个执行相同功能的实现,但是我将添加我在Java中使用的方法代码确定。

 public void print(Node<E> e){
     if (e != null) {
         print(e.left);
         System.out.println(e.element);
         print(e.right)
     }
 }

为什么存在一个无效节点的事实导致方法在最后一个节点停止,经过递归调用并打印最后一个节点

只要您尚未到达最左端节点,您就会继续致电print(e.left)。一旦到达左节点,该节点的e.left将是nullprint(null)将结束递归。返回后,System.out.println(e.element);将打印左最节点。

为什么一旦打印出最后的左节点,为什么它会向右移至右

然后将执行print(e.right)。如果左节点最有一个右孩子,则print(e.right)将递归打印该右子树的子树。否则,它将执行print(null),结束该路径上的递归。

一旦左节点的 print()返回,您就可以返回到该节点的父级的print(),因此您致电该父节点的System.out.println(e.element);,依此类推,等等...

最新更新