A. 求二叉樹高度的原理、演算法是什麼,越詳細越好,C語言,謝謝
首先分析二叉樹的深度(高度)和它的左、右子樹深度之間的關系。從二叉樹深度的定義可知,二叉樹的深度應為其左、右子樹深度的最大值加1。由此,需先分別求得左、右子樹的深度,演算法中「訪問結點」的操作為:求得左、右子樹深度的最大值,然後加
1
。
int
Depth
(BiTree
T
){
//
返回二叉樹的深度
if
(
!T
)
depthval
=
0;
else
{
depthLeft
=
Depth(
T->lchild
);
depthRight=
Depth(
T->rchild
);
depthval
=
1
+
(depthLeft
>
depthRight
?
depthLeft
:
depthRight);
}
return
depthval;
}
B. 以二叉樹鏈表作為二叉樹的存儲結構,怎麼編寫演算法計算返回二叉樹的高度
編寫方法如下:
C. 二叉樹高度的求法
LeetCode - 104. 二叉樹的最大深度
例如:
給出二叉樹 [3,9,20,null,null,15,7],
返回它的高度 3。
廣度優先搜索
演算法思想:用隊列實現層序遍歷,返回最後一層的高度。
深度優先搜索1
演算法思想:遞歸求左右子樹高度,較大者 +1。
深度優先搜索2
演算法思想:用棧實現前序(或後序)遍歷,最大棧長度即為樹的高度。
D. C語言求二叉樹高度問題
就拿你這個圖來算吧
以1為根的樹高 = 以2為根的樹高 和 以 4為根的樹高 的 大者 + 1
以2為根的樹高 =以6為根的樹高 和 以 7為根的樹高 的 大者 + 1
E. 怎麼計算二叉樹高度
分析二叉樹的深度(高度)和它的左、右子樹深度之間的關系。從二叉樹深度的定義可知,二叉樹的深度應為其左、右子樹深度的最大值加1。由此,需先分別求得左、右子樹的深度,演算法中「訪問結點」的操作為:求得左、右子樹深度的最大值,然後加 1 。
int Depth (BiTree T ){ // 返回二叉樹的深度
if ( !T ) depthval = 0;
else {
depthLeft = Depth( T->lchild );
depthRight= Depth( T->rchild );
depthval = 1 + (depthLeft > depthRight ?
depthLeft : depthRight);
}
return depthval;
}
一棵深度為k,且有2^k-1個結點的二叉樹,稱為滿二叉樹。這種樹的特點是每一層上的結點數都是最大結點數。而在一棵二叉樹中,除最後一層外,若其餘層都是滿的,並且或者最後一層是滿的,或者是在右邊缺少連續若干結點,則此二叉樹為完全二叉樹。具有n個結點的完全二叉樹的深度為floor(log2n)+1。深度為k的完全二叉樹,至少有2k-1個葉子結點,至多有2k-1個結點。
二叉樹的深度是從根節點開始(其深度為1)自頂向下逐層累加的;而二叉樹高度是從葉節點開始(其高度為1)自底向上逐層累加的。雖然樹的深度和高度一樣,但是具體到樹的某個節點,其深度和高度是不一樣的。
F. 求一個二叉樹的高度 用遞歸的方法
如果是結點的定義中有深度這個屬性,那麼用一個隊列就可以了。
隊首放節點
隊尾取出節點
比如:根節點放入隊列
(開始只有這個一個節點在隊列中)
然後呢
從隊尾取出這個根節點
然後打散
把他的左右孩子放入對首(這時候有2個節點
也就是二叉樹的第二層)
之後從隊伍里取出這2個節點
打散
之後隊伍里應該是
二叉樹第三層的4個節點
。。。。。
這樣就把二叉樹層次遍歷了
因為有些節點沒有孩子節點
也就是葉子
這個隊列中的節點
逐漸會越來越少
最後一個取出隊列的節點
的深度也就是二叉樹的高度
如果結點定義沒有深度,我寫了一個方法,請樓主參考。
public
static
int
findlevel(binarynode
root)
{
arraylist
>
result=new
arraylist
>();
linkedlist
list=new
linkedlist
();
list.add(root);
result.add(list);
int
level=0;
while(true)
{
list=new
linkedlist
();
for(int
i=0;i
0)
result.add(list);
else
break;
level++;
}
return
level;
}
其實思路和剛才說的是大同小異的,用一個level來記錄二叉樹的層次,最底的層次就是他的高度。
每一層都存在單獨的list里,這些list再存在一個arraylist里,這樣很容易就能知道每一層有哪些結點,如果這些結點有孩子,就把level++,直到某一層沒有任何結點有孩子,這時候level就是最後一層了。
G. c語言遍歷二叉樹,怎麼求每個葉節點的高度
遍歷的時候帶一個變數表示高度,比如你用visit遍歷的話就在參數里寫個heigth變數,進入子節點的時候讓height+1,遇到葉子節點的時候height的值就是其高度