這次節點的資料域增加了高度這個量,用來計算平衡因子,以此在插入的時候來調整樹的結構
節點:
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...