資料結構習題 求二叉樹的深度與寬度

2021-10-05 09:49:33 字數 1400 閱讀 1204

題目來自王道資料結構一書,歸納經典題目

遞迴

/*結構體宣告*/

typedef

struct bitnode

*bitree,bitnode;

int

btdepth

(bitree t)

借用一下這位大佬的圖,自己再走一遍流程。

分析:首先遍歷a層,向a的左子樹遞迴進入b層,到達b層再遞迴進入其左子樹**#層**

發現此時的t為null,從#層返回0到b層,b層的ldep已結束,再往下走,進入其右子樹rdep,同理進入#層後發現t為null返回0到b層。此時b層的左右子樹遞迴都結束了,繼續往下走,判斷if(ldep>rdep)ldep和rdep為兩個0,返回ldep=rdep+1=1到a層。

此時a層的ldep已經結束了,往下走,進入其右子樹rdep,和上面的操作類似最後返回a層時的rdep=rdep+1=2。此時a層的左右子樹都遍歷完,判斷if(ldep>rdep),ldep=1,rdep=2,所以返回rdep+1=3,這顆樹的深度就是3

非遞迴採用層次遍歷,設定變數level記錄當前結點所在層次,設定變數last指向當前層的最右結點,每次遍歷出隊時與last指標比較,若兩者相等,則層數加1,並讓last指向下一層的最右結點,直到遍歷完成。

int

btdepth2

(bitree t)

}return level;

}

非遞迴

類似於上面求深度的非遞迴寫法,要用乙個last值指向當前層的最右結點,每次出乙個元素,寬度width+1,若處理到了某一層的最右乙個結點,即front==last時,再判斷max和width的關係,最後直到隊列為空,max就位最二叉樹的最寬寬度。

int

btdepth2

(bitree t)

}return max;

}

遞迴

count[k]陣列用來儲存每一層的寬度,每次遞迴k+1代表層次+1,

int max=0;

int conut_[maxsize]

;int

getwidth

(bitree t,

int k)

資料結構二叉樹的建立與求深度

總時間限制 1000ms 記憶體限制 65535kb 描述給定一棵二叉樹,求該二叉樹的深度 二叉樹深度定義 從根結點到葉結點依次經過的結點 含根 葉結點 形成樹的一條路徑,最長路徑的節點個數為樹的深度 輸入第一行是乙個整數n,表示二叉樹的結點個數。二叉樹結點編號從1到n,根結點為1,n 10 接下來...

求二叉樹的深度和寬

1 根據教材中演算法6.4所示的演算法,按照給出的先序序列建立二叉鍊錶表示的二叉樹 結點數不超過26 2 計算該二叉樹的繁茂程度。一顆二叉樹的繁茂程度為二叉樹的寬度與高度的乘積,二叉樹的寬度為各層節點數的最大值。包含多組測試資料。每組測試資料一行,給出二叉樹的先序遍歷序列 至少1個結點 輸出二叉樹的...

資料結構 求二叉樹的最大深度

給定乙個二叉樹,找出其最大深度。二叉樹的深度為根節點到最遠葉子節點的最長路徑上的節點數。說明 葉子節點是指沒有子節點的節點。示例 給定二叉樹 3,9,20,null,null,15,7 3 9 20 15 7返回它的最大深度 3 求最大深度,用遞迴子問題處理,如果root為空,則深度為0,如果roo...