二叉樹遞迴詳解

2021-06-17 17:37:28 字數 1213 閱讀 1972

請問這段**的執行步驟 《重點是遞迴呼叫那段》 最好每一步都寫出來

哪步哪個資料進棧,什麼時候出棧,請明白人來給講解一下。

連題都看不懂的請一起等待答案。謝謝.

重點是遞迴呼叫的部分,前面的結構就不用了。

struct bitree

;void preorder(struct bitree *root)}

void preorder(struct bitree *root)

}比如一顆完全二叉樹,層次遍歷為(a)(bc)(defg)(hijklmno)

按照這的先序遍歷過程為:

第一次呼叫,所以訪問到a

《進入第一層遞迴》訪問以b為根結點的樹(a的左子樹),所以訪問到b.

《進入第二層遞迴》訪問以d為根結點的樹(b的左子樹),.所以訪問到d.

《進入第三層遞迴》訪問以h為根結點的樹(d的左子樹),.所以訪問到h.

《進入第四層遞迴》訪問h的左子樹,因為h是葉子結點(即左孩子指標p=null),返回第三層遞迴,

《再進入第四層遞迴》訪問h的右子樹,因為h是葉子結點(即右孩子指標p=null),返回第三層遞迴.

到這裡h的左右子樹訪問完,退回到第二層遞迴.

《再進入第三層遞迴》訪問以i為根結點的樹(d的右子樹),所以訪問到i

《進入第四層遞迴》訪問i的左子樹,因為i是葉子結點(即左孩子指標p=null),返回第三層遞迴,

《再進入第四層遞迴》訪問i的右子樹,因為i是葉子結點(即右孩子指標p=null),返回第三層遞迴.

到這裡i的左右子樹訪問完,退回到第二層遞迴.

到這裡d的左右子樹訪問完,退回到第一層遞迴.

《再進入第二層遞迴》訪問以e為根結點的樹(b的右子樹),.所以訪問到e.

這樣依次下去.......

最後訪問到o

二叉樹遞迴

我們來看一下二分搜尋樹的釋放,這就是乙個典型的遞迴問題 function destroy node 這個遞迴包括兩個部分,乙個是遞迴終止條件,乙個是遞迴的執行。我們知道遞迴是不斷地將當前函式壓入函式棧,如果沒有if node null return這個終止條件,當函式棧被壓滿之後就會發生棧溢位 棧的...

遞迴二叉樹

1 基本概念 1 節點 結點包含資料和指向其它節點的指標。2 根節點 樹第乙個結點稱為根節點。3 結點的度 結點擁有的子節點個數。4 葉節點 沒有子節點的節點 度為0 5 父子節點 乙個節點father指向另乙個節點child,則child為孩子節點,father為父親節點。6 兄弟節點 具有相同父...

二叉樹 遞迴

完全二叉樹 只有最後一層不滿,其餘節點都有兩個孩子,並且最後一層的節點從左向右排列,如下圖 擴充二叉樹 每個實節點都有兩個孩子,如圖 類似dfs cout data preorder recursion bt leftchild preorder recursion bt rightchild vo...