求乙個二叉樹的高度 用遞迴的方法

2025-03-06 15:15:04 字數 3030 閱讀 5270

1樓:包開習凌雪

如果是結點的定義中有深度這個屬性,那麼用乙個佇列就可以了。

隊首放節點。

隊尾取出節點。

比如:根節點放入佇列。

開始只有這個乙個節點在佇列中)

然後呢。從隊尾取出這個根節點。

然後打散。把他的左右孩子放虛粗則入對首(這時候有2個節點。

也就是二叉樹的第二層)

之後凳脊從隊伍裡取出這2個差棚節點。

打散。之後隊伍裡應該是。

二叉樹第三層的4個節點。

這樣就把二叉樹層次遍歷了。

因為有些節點沒有孩子節點。

也就是葉子。

這個佇列中的節點。

逐漸會越來越少。

最後乙個取出佇列的節點。

的深度也就是二叉樹的高度。

如果結點定義沒有深度,我寫了乙個方法,請樓主參考。

public

static

intfindlevel(binarynoderoot)arraylist

result=new

arraylist

linkedlist

list=new

linkedlist;;

intlevel=0;

while(true)

list=new

linkedlist

for(inti=0;i

elsebreak;

level++;

return

level;

其實思路和剛才說的是大同小異的,用乙個level來記錄二叉樹的層次,最底的層次就是他的高度。

每一層都存在單獨的list裡,這些list再存在乙個arraylist裡,這樣很容易就能知道每一層有哪些結點,如果這些結點有孩子,就把level++,直到某一層沒有任何結點有孩子,這時候level就是最後一層了。

2樓:鹿濮赫山菡

先一層一層的遍歷二叉樹。

用乙個輔助的資料結輪爛構佇列。

佇列!注意。

這個很重要。

隊首放節點。

隊尾取出節點。

比如:根節點放入佇列。

開始只有這個乙個節點在佇列中)

然後呢。從隊尾取出這個陪臘根節點。

然後打散。把他的左右孩子放入對首(這時候有2個節點。

也就是二叉樹的第二層)

之後從隊伍裡取出這2個節點。

打散。之後隊伍裡應該是。

二叉樹第三層的4個節點。

這樣就把二叉樹層次遍歷了。

因為有些節點沒有孩子節點。

也就是葉子。

這個佇列中的節點。

逐漸會越來越少。

最後乙個取出佇列的節點。

的深度也就是二叉樹的高度。

所以求二叉樹的高度。

就用這種層進性遍歷。

每次把節點放入佇列中時。

也把他的深度。

和節臘亂漏點的指標一起放入。

取出乙個節點。

打散的時候。

注意他的子節點的度是他父節點的+1就ok

什麼是二叉樹的遞迴?

3樓:博學小趙愛生活

樹的後序遍歷是指先依次後序遍歷每棵子樹,然後訪問根結點。當樹用二叉樹表示法(也叫孩子兄弟表示法)儲存時,可以找到唯一的一棵二叉樹與之對應,我們稱這棵二叉樹為該樹對應的二叉樹。那麼根據這個法則可知,樹的後序遍歷序列等同於該樹對應的二叉樹的中序遍歷。

從二叉樹的遞迴定義可知,一棵非空的二叉樹由根結點及左、右子樹這三個基本部分組成。因此,在任一給定結點上。

訪問結點本身(n),⑵遍歷該結點的左子樹(l),⑶遍歷該結點的右子樹(r)。

以上三種操作有六種執行次序:

nlr、lnr、lrn、nrl、rnl、rln。

注意:前三種次序與後三種次序對稱,故只討論先左後右的前三種次序。

從二叉樹的遞迴定義可知,一棵非空的二叉樹由根結點及左、右子樹這三個基本部分組成。因此,在任一給定結點上。

求高手解釋下二叉樹遞迴求深度問題

4樓:網友

這個演算法的意思是,當前樹的深度等於其左子樹和右子樹中較深的那乙個的深度再加1

例如:您提供的圖a的左子樹深度為3,右子樹的深度為3,此時a這棵樹的深度就為4

再來考慮d和g,此時d的左子樹深度為0,右子樹深度為0,所以返回0+1 = 1

同理g也返回1

因此c和f返回2,而b和e返回3,最終a返回4

5樓:網友

為0怎麼沒法比較呢?即使為0,也會返回1,並且還要按照剛才進入的一層層往回退再次比較的。

求二叉樹高度

6樓:方鴻暉

由題意得知,樹中結點總數為n,由所有分支節點的度均為m得知,樹中只有度為0的葉子結點n0和度為m的分支結點nm。總結點數n=n0+nm;由於每個分支都指向乙個結點,只有根結點沒有分支指向,所以總結點數n=m*nm+1;根據這兩個式子就可以求出葉子數目n0=((m-1)*n+1)/m

求二叉樹高度的原理、演算法是什麼,越詳細越好,c語言,謝謝

7樓:前飲宿運鴻

首先分析二叉樹的深度(高度)和它的左、右子樹深度之間的關係。睜談從二叉樹深度的定義可知,二叉樹的深度應為其左、右子樹深度的最大值加1。由凱陵此,需先分別求得左、右子樹的深度,演算法中「訪問結點」的操作為:

求得左、右子樹深度的最大值盯早戚,然後加。

intdepth

bitreet

返回二叉樹的深度。ift

depthval

elsedepthleft

depth(

t->lchild

depthright=

depth(

t->rchild

depthval

depthleft

depthright

depthleft

depthright);

return

depthval;

按照二叉樹的定義,具有結點的二叉樹有(C

選b5種 兩層的有一種 三層的第一層是根,第二層兩種情況,第三層兩種情況。1 2 2 4所以1 4 5種 樓上是否明白二叉樹形態 如果不考慮結點資料資訊的組合情況,具有3個結點的二叉樹有5種形態,其中,只有一棵二叉樹具有度為2的結點 即為一棵度為2的二叉樹 其餘四棵二叉樹的度均為1。因此答案為5 按...

先序線索二叉樹的遍歷,後序線索二叉樹怎麼畫啊

include include typedef enum pointertag 指標標誌 typedef char datatype typedef struct bithretreebithretree bithretree pre 全域性變數,用於二叉樹的線索化 bithretree creat...

高度為hh0的二叉樹最少有個結點

最少有h個結點。高度指樹的層數 注意 根結點是第1層,國外有按根結點為第0層的 每層最少要有乙個結點,所以是h個結點。這個題與二叉不二叉沒關係。一棵二叉樹高度為h,所有節的度為0或2,則這棵樹最少有多少個節點 這棵樹最少有2h 1個節點。分析 考慮按規則構造一棵高度為h的二叉樹,可使得內其節點數最 ...