看書左旋右旋看着懵逼,不懂往左旋轉往右旋轉到底是怎么個旋轉法。
總結了一個萬能的手動調整方法,不用記憶什么LL,LR,RL,RR的形式,通吃。
當新插入一個節點,導致不平衡,進行手動調整。
步驟有四步:
1。找到最小不平衡子樹(和其根節點)
2。從根節點出發,沿插入路徑找三個節點。
3。調整這三個節點。(找出中位數,讓中位數作為根節點,其余兩個一左一右)
4。剩下的節點,左右子樹的位置保持不變,再找到最后一個節點的插入位置。
(1)先以三個節點的情況演示,假設插入了15,3,7,出現不平衡。
最小不平衡子樹就是三個節點。找出中位數7,作為根節點。然后3放到左邊,15放到右邊。調整完成。
(2)繼續插入10和9,導致不平衡。
最小不平衡子樹如圖所示。從根節點出發找到三個節點。
調整這三個節點的位置,方法和上面一樣,把中位數10作為根節點。
(3)繼續插入8導致不平衡,以及最小不平衡子樹。
7是根節點。從7開始,找到7,10,9三個節點。調整這三個。
讓9做根節點,7在左,10在右。
對於剩下的節點,左右子樹位置保持不變。3仍然在最左,15仍然在最右。
然后再找到8應該插在哪里就行了。調整完成。
復述一遍方法:
1。找到最小不平衡子樹(和其根節點)
2。從根節點出發,沿插入路徑找三個節點。
3。調整這三個節點。(找出中位數,讓中位數作為根節點,其余兩個一左一右)
4。剩下的節點,左右子樹的位置保持不變,再找到最后一個節點的插入位置。
這套方法萬能,不用記書上的四種樣式。