計算二叉樹的高度的遞迴和非遞迴實現

2021-06-22 13:38:44 字數 731 閱讀 8048

1.遞迴方法

int findtreedeep(bintree bt)

return deep;

}

2.非遞迴方法

非遞迴實現基本思想:

受後續遍歷二叉樹思想的啟發,想到可以利用後續遍歷的方法來求二叉樹的深度,在每一次輸出的地方替換成算棧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,結束遍歷

int treedeep(bintree bt )

if(top(tag)==1)else

}return deeptree;

}

求解二叉樹的高度(遞迴 非遞迴)

遞迴方式 遞迴方式的求解過程很簡單,只需要將問題分解。首先,遞迴出口是什麼?毫無疑問,當樹節點為空時,我們就可以結束遞迴了。那麼當前樹的高度和其左子樹及右子樹的關係是什麼呢?樹的高度,定義為從根節點到葉子節點的最長路徑 因此當前樹深應該是自身節點所佔的一層高度加上左右子樹中深的高度。因此,有一下遞迴...

二叉樹的非遞迴遍歷(遞迴和非遞迴)

二 叉樹是一種非常重要的資料結構,很多其它資料結構都是基於二叉樹的基礎演變而來的。對於二叉樹,有前序 中序以及後序三種遍歷方法。因為樹的定義本身就是 遞迴定義,因此採用遞迴的方法去實現樹的三種遍歷不僅容易理解而且 很簡潔。而對於樹的遍歷若採用非遞迴的方法,就要採用棧去模擬實現。在三種遍歷中,前序和中...

二叉樹 遞迴 非遞迴

include include include include using namespace std typedef struct node bintree typedef struct node1 btnode void creatbintree char s,bintree root 建立二叉...