二叉樹例項學習(五) 更新節點及祖輩節點高度

2022-08-20 02:54:11 字數 1289 閱讀 3039

在第(四)節獲取節點高度函式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...