簡體   English   中英

缺少了解遞歸順序樹遍歷的鏈接

[英]Missing link in understanding recursive in order tree Traversal

我主要按順序遍歷順序樹進行遞歸編程,但是我想澄清的只是我的理解中的一個小空白。 當第一個遞歸方法調用將節點指針一直向左移動時,為什么存在空節點的事實導致該方法在最后一個節點處停止,經過遞歸調用並打印最后一個節點。 我的一部分可以接受,這就是發生的事情,但是我真正不明白的是,為什么一旦您打印了最后一個左節點,為什么它又又移回了右節點,就像對待最近打印的節點一樣它處理空節點。 在我看來,它會繼續向左移動,好像反復撞牆一樣。 我不確定我在解釋我沒有得到什么,如果不清楚,我會很樂意嘗試改寫和使用圖片。 我假設遞歸順序樹遍歷是非常標准的,盡管我知道兩個實現相同功能的實現,但是為了確定起見,我將添加在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將為null ,並且print(null)將結束遞歸。 一旦返回, System.out.println(e.element); 將打印最左邊的節點。

為什么一旦打印了最后一個左節點,為什么它又又移回到了右節點

然后將執行print(e.right) 如果最左邊的節點有一個右孩子,則print(e.right)將遞歸打印該右孩子的子樹。 否則,它將執行print(null) ,在該路徑上結束遞歸。

返回最左邊節點的print()后,您將返回該節點的父節點的print() ,因此調用System.out.println(e.element); 對於該父節點,依此類推...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM