2016-12-26 232 views
3

我是新來的圖和tree.Below的概念是樹的遍歷樹。樹遍歷中的遞歸

if(n!=null){ 
    treeTraversal(n.left); 
    System.out.println(n.val); 
    treeTraversal(n.right); 
} 

我不能理解流程,因爲它涉及遞歸。有人可以解釋我如何控制流量發生堆棧。

回答

2

比方說,我有一棵樹是一樣的東西:

4 
/\ 
    2 5 
/\ 
1 3 

您的代碼會先將通過左孩子遞歸4 - > 2 - > 1。由於1沒有一個左子(它是空的),它會打印1然後彈出堆棧。下一步是遞歸2.它將打印2然後遍歷2的右側子節點,即3,它將打印3,然後彈出堆棧。然後它會打印4,然後是4的右側小孩5.打印的順序將是1,2,3,4,5。Here也是一個很好的動畫。

1

這是您第一次訪問是否存在,如果你不打印點頭左子中序遍歷,你斯格特到例如左節點enter image description here 在這棵樹你的代碼進行投放將是 10,4,11,2 ,5,9,1,7,6,8,3 我們有preOrderpostOrde遍歷以及

預訂

preorder(Node N) 
if (N != null) 
Visit N; 
for each child Y of N 
preorder(Y); 

併發布順序

postorder(Node N) 
if (N != null) 
for each child Y of N 
postorder(Y); 
Visit N; 
2

的圖像顯示了一個簡單的樹代碼的執行,它應該幫助你理解遞歸是如何工作的,只需按照箭頭。

在每疊有樹形圖,顯示爲黃色當前節點(單擊圖像將其展開):

tree recursion

+0

你使用哪個軟件的圖形,是自動生成的圖? – firephil

+0

@firephil不,我手動在[draw.io](https://www.draw.io/) –