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的二叉樹,可使得內其節點數最 ...