在第(四)節獲取節點高度函式getheight()函式的基礎上,增添並測試更新節點高度函式和更新祖輩節點高度函式:updatehight()、updateabovehei()。在上節中,每插入乙個新節點,根結點以及新節點的其它祖輩節點的高度不增加,如今這已成為過去。在插入節點函式insertaslc()、insertasrc()函式中,分別新增updateabovehei(),則每次插入新的節點,都會更新祖輩的節點高度。
節點類的**,如第四節,不再增加。
樹的定義**如下:
#ifndef bintree在測試程式中的樹形結構如圖所示#define bintree#include
template
class
bintree
else
return l_hight>r_hight?l_hight:r_hight;
}int max(int a,int
b)
///更新節點高度函式updateheight()
///以及更新祖輩節點高度函式updateaboveheight()
virtual
int updateheight(binnodeposi(t) x)//
更新節點x的高度
void updateaboveheight(binnode*x)//
跟新節點x及其祖先的高度
}public
: bintree():_size(
0),_root(null){}
int size()const//
獲取樹的規模,即共有多少個節點
bool empty()//
判斷是否為空樹
binnodeposi(t) root()const//
獲取根結點指標
binnodeposi(t) insertasroot(t const&e)
binnodeposi(t) insertaslc(binnodeposi(t) x,t
const&e)
binnodeposi(t) insertasrc(binnodeposi(t) x,t
const&e)
};#endif
//bintree
測試**與第四節一樣:
int我們可以看到,隨著新節點的插入,根結點的高度隨之而增加。main()
二叉樹後繼節點
二叉樹後繼節點,中序遍歷的後乙個節點 1 有右子樹,右子樹的最左節點是後繼 2 無右子樹,並且是父節點的左孩子,父節點為後繼 3 無右子樹,並且是父節點的右孩子,查該節點是哪個節點左子樹的最後節點 一直往上找,找到乙個節點是父節點的左孩子,則該父節點為後繼節點 class node def init...
二叉樹 完全二叉樹的節點數
給定一棵完全二叉樹 最後一層所有節點都在最左側,其餘所有層節點數都為2 h 求其節點數。最簡單的方法就是遍歷一遍,把節點數加起來,但時間複雜度太高。以最左邊的路徑長作為二叉樹的高度,對於乙個節點,如果左子樹高度和右子樹高度一樣,說明左子樹為滿二叉樹,此時把其左子樹的節點數計算出來,加入總數,對右子樹...
二叉樹刪除節點, 查詢二叉樹最大值節點
從根節點往下分別查詢左子樹和右子樹的最大節點,再比較左子樹,右子樹,根節點的大小得到結果,在得到左子樹和右子樹最大節點的過程相似,因此可以採用遞迴的 樹節點結構 public class treenode public class solution treenode left maxnode roo...