遞迴思想:如果一顆樹只有乙個節點,它的深度為1.如果根節點只有左子樹沒有右子樹,那麼它的深度為左子樹的深度加1,同理,只有右子樹沒有左子樹,它的深度為右子樹深度加1,如果既有左子樹又有右子樹,它的深度為左右子樹深度較大的加1。遞迴很容易實現:
int非遞迴實現基本思想:findtreedeep(bintree bt)
受後續遍歷二叉樹思想的啟發,想到可以利用後續遍歷的方法來求二叉樹的深度,在每一次輸出的地方替換成算棧s的大小,遍歷結束後最大的棧s長度即是棧的深度。
演算法的執行步驟如下:
(1)當樹非空時,將指標p指向根節點,p為當前節點指標。
(2)將p壓入棧s中,0壓入棧tag中,並令p指向其左孩子。
(3)重複步驟(2),直到p為空。
(4)如果tag棧中的棧頂元素為1,跳至步驟(6)。從右子樹返回
(5)如果tag棧中的棧頂元素為0,跳至步驟(7)。從左子樹返回
(6)比較treedeep與棧的深度,取較大的賦給treedeep,對棧s和棧tag出棧操作,p指向null,並跳至步驟(8)。
(7)將p指向棧s棧頂元素的右孩子,彈出棧tag,並把1壓入棧tag。(另外一種方法,直接修改棧tag棧頂的值為1也可以)
(8)迴圈(2)~(7),直到棧為空並且p為空
(9)返回treedeep,結束遍歷
1inttreedeep(bintree bt )
12if(top(tag)==1
)else23}
24return
deeptree;
25 }
面試題28 二叉樹的深度
思路 二叉樹的深度等於左右子樹的最大深度加1,顯然利用遞迴。include stdafx.h include include using namespace std struct binarytreenode 求二叉樹的深度 int depth binarytreenode proot int nl...
面試題55 二叉樹的深度
輸入一棵二叉樹的根結點,求該樹的深度。從根結點到葉結點依次經過的結點 含根 葉結點 形成樹的一條路徑,最長路徑的長度為樹的深度。例如下圖中的二叉樹的深度為4,因為它從根結點到葉結點最長的路徑包含4個結點 從根結點1開始,經過結點2和結點5,最終到達葉結點7 思路 如果一棵樹只有乙個結點,它的深度為1...
面試題55 二叉樹的深度
題目一 輸入一棵二叉樹,求該樹的深度。從根結點到葉結點依次經過的結點 含根 葉結點 形成樹的一條路徑,最長路徑的長度為樹的深度。遞迴版本 class solution 非遞迴 層次遍歷 遞迴遍歷,僅僅一行 class solution 迭代版本 class solution return depth...