平衡二叉樹
是一棵空二叉樹;
或者是具有下列性質的二叉排序樹:
(1)它的 左子樹 和 右子樹 都是 平衡二叉樹;
(2)左子樹 與 右子樹 的 高度之差 的 絕對值 不超過1。
結點的平衡因子(balance factor)定義為: 其 左子樹 與 右子樹 的高度之差:
結點的平衡因子 = 左子樹的高度 - 右子樹的高度
平衡二叉樹中任何乙個結點的平衡因子只能是-1、0或1
在平衡二叉樹中,插入或刪除乙個結點可能破壞二叉樹的平衡性,因此在插入或刪除時都要調整二叉樹,使之始終保持平衡狀態。
在一棵平衡二叉樹中插入乙個結點,如果插入後破壞了二叉樹的平衡性,則需要調整一棵最小不平衡子樹.
在保證排序特性的前提下,調整最小不平衡子樹中各結點的連線關係,達到新的平衡。
根據插入結點與最小不平衡子樹的根結點的位置關係,分為4種型別:ll、lr、rl 和 rr
.
相應地有4種旋轉模式用於調整最小不平衡子樹,使之恢復平衡。
(1)ll型調整
當在b的左(l)孩子a 的左(l)子樹上插入結點時,因左子樹較高而失去平衡,b的平衡因子變為2,成為最小不平衡子樹。
進行ll型調整:
向右旋轉,選擇b的左孩子a作為調整後平衡子樹的根結點,將原a的右子樹作為b的左子樹.
(2)rr型調整
當在a的右(r)孩子b的右(r)子樹上插入結點時,因右子樹較高而失去平衡,a的平衡因子變為-2,成為最小不平衡子樹。
進行rr型調整:向左旋轉,選擇a的右孩子b作為調整後平衡子樹的根結點,將原b的左子樹作為a的右子樹.
(3)lr型調整
當在c的左(l)孩子a的右(r)子樹上插入結點時,因左子樹較高而失去平衡,c的平衡因子變為2,成為最小不平衡子樹。
進行lr型調整:
向右旋轉,選擇a的右孩子b作為調整後平衡子樹的根結點,a、c分別作為b的左、右孩子,原b的左子樹作為a的右子樹,原b的右子樹作為c的左子樹.
(4)rl型調整
當在a的右(r)孩子c的左(l)子樹上插入結點時,因右子樹較高而失去平衡,a的平衡因子變為-2,成為最小不平衡子樹。進行rl型調整:向左旋轉,選擇c的左孩子b作為調整後平衡子樹的根結點,a、c分別作為b的左、右孩子;原b的左子樹作為a的右子樹,原b的右子樹作為c的左子樹
平衡二叉樹例題 平衡二叉樹
acwing 72.平衡二叉樹 思路一 求每個節點的左右子樹深度,根據深度差判斷,直到葉子節點結束,效率不夠高,每個節點都要用兩次計算深度的遞迴函式 思路二 從葉子節點開始,計算深度差,一旦有深度差大於1的,就直接返回0,也不用管上面的深度是不是正確了,畢竟我們只需要true和false兩種狀態,省...
二叉樹 平衡二叉樹
1.題目 給定乙個二叉樹,判斷這棵二叉樹是否是高度平衡的二叉樹 平衡二叉樹 乙個二叉樹每個節點 的左右兩個子樹的高度差的絕對值不超過1 2.題目分析 1 如果乙個節點的兩個子樹的深度之差超過1,則不是平衡二叉樹 2 如果乙個節點的兩個子樹的深度之差不超過1,則是平衡二叉樹 3.程式分析 1 若這棵二...
平衡二叉樹
平衡二叉樹 time limit 1000 ms memory limit 32768 kb submit 16 6 users accepted 6 6 users 所謂平衡 二叉樹就是 水星文,若看不懂請跳轉到下一題 你的任務判斷輸入的二叉樹是否為平衡二叉樹,是則輸出yes,否則輸出no。每行是...