平衡二叉樹(AVL樹)

2021-08-20 07:43:53 字數 473 閱讀 1097

左右子樹高度之差的絕對值不超過1,左右子樹高度之差稱為該結點的平衡因子。

通過對樹的結構進行調整,使樹的高度在每次插入結束後仍能保持o(logn)的級別。

引入變數height來記錄高度

struct node;
新建乙個結點

1.申請變數空間  2 初始結點權值,高度(1) 3 初始左右孩子為空 4 返回新建這個節點的位址

node *newnode(int v)
獲取當前結點所在子樹的高度
int getheight(node* root)

更新height

int updateheight(node *root)

計算平衡因子

int getbalancefactor(node* root)

平衡二叉樹 AVL

平衡二叉樹在查詢中經常用到。由於平衡二叉樹是一種平衡的二叉排序樹,所以其建立方法必須要遵守二叉排序樹的規則,即每個新插入的節點是乙個葉子節點。它左右子樹高度差不超過1,並且要求左右子樹也是平衡二叉樹,並且左子樹的節點最大值小於根節點,右子樹節點最小值大於根節點。1 高度為log n 2 平均查詢長度...

平衡二叉樹 AVL 實現(3)

現象1 注意 q是30,而不是20,因為刪除了25,節點會移動,以下現象均遵循此規律 現象2 現象3 現象1和現象2比較簡單,不需要平衡化處理,現象3則比較複雜.先討論現象1和2 先找到節點,然後刪除節點 private node findnode int value if value node.d...

平衡二叉樹 AVL 實現 2

繼續討論旋轉 為了方便討論是做點記號 x為插入的節點p為旋轉軸 p有時候為x的父節點如ll,rr旋轉 p有時候也為x,如lr,rl旋轉 r為平衡因子絕對值 2的節點 看下面四種情況 當三個節點處於一條直線,並均是左節點時,需要以中間的節點為旋轉軸向右側 順時針 旋轉一次 使得c成為b的右子節點 b代...