二叉平衡樹(AVL)的插入

2021-08-16 05:49:43 字數 810 閱讀 5064

這次節點的資料域增加了高度這個量,用來計算平衡因子,以此在插入的時候來調整樹的結構

節點:

struct node

;

構造新節點

node* newnode(int v)

獲取樹高

int getheight(node* root)

計算平衡因子:

int getbalancefactor(node* root)

更新樹高:

void updateheight(node* root)

左旋操作:

void l(node*

&root)

右旋操作(與左旋對稱):

void r(node*

&root)

插入:

void insert(node*

&root,int v)

if(vval)

}else

}}

關鍵小心左旋右旋和插入的細節。

平衡二叉樹 AVL

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

平衡二叉樹(AVL樹)

左右子樹高度之差的絕對值不超過1,左右子樹高度之差稱為該結點的平衡因子。通過對樹的結構進行調整,使樹的高度在每次插入結束後仍能保持o logn 的級別。引入變數height來記錄高度struct node 新建乙個結點 1.申請變數空間 2 初始結點權值,高度 1 3 初始左右孩子為空 4 返回新建...

平衡二叉樹 AVL 實現(3)

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