非遞迴演算法算二叉樹的高度
1.方法思路:用深搜和後序遍歷結合,遍歷所有節點,記錄最大高度。時間為O(n),空間為O(max)。(自創)
程式碼如下(未測試):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
//如果右孩子存在並還沒訪問,則訪問
|
2.方法思路:用層序遍歷,這裡需要記錄每一層的第一個結點r,用於計算層數。時間為O(n),空間為結點最多的層*2。(自創)
程式碼如下(未測試):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
|
3.方法思路:層次遍歷+佇列應用,設定變數level記錄當前結點所在層數,設定變數last指向當前層最後結點,每次層次遍歷出隊時與last指標比較,若兩者相等,那麼層數加1,並讓last指向下一層最右結點,至遍歷完成。level的值即為二叉樹的高度。時間為O(n),空間為O(n)。(王道書所述)
程式碼如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|
4.遞迴方法
程式碼如下:
1 2 3 4 5 6 7 |
|