今天學習平衡樹與二叉樹,希望能夠從記部落格中總結一下學到的知識。
****於idreamo的部落格這篇文章講的還是很不錯的,推薦大家多學習學習。
二叉搜尋樹只有保持平衡時其查詢效率才會高。
在平衡樹中,重要的是保持中序和平衡,因此平衡樹的旋轉中,所有的旋轉都是依據中序來操作的,也就是說旋轉不引起中序的變化。
當插入乙個新的元素或者刪除元素的時候,可能會導致平衡樹的失衡,插入乙個元素可能會導致幾個節點的平衡被破壞,因此需要從插入元素依次向上搜尋失衡的節點,每個失衡的節點都需要重新調整平衡。
在旋轉中分為ll,lr,rr,rl四種旋轉。
ll旋轉
插入的元素在失去平衡節點的右節點的右節點稱為ll旋轉
從這張中可以看出,插入後的順序為x-15-22-43-a-75,因此旋轉的時候將左節點的右節點作為根節點的左節點,這樣就可以保證中序不變即22-43-a的順序不變,同時不平衡點也將變成平衡。(中序:先 接受左節點)
lr旋**
lr旋轉中,因為不平衡部分為22-x-43 因此我們旋轉的時候需要將x成為left節點的右孩子,43成為根節點,a成為43的右孩子,這樣改變的平衡,也保持了22-x-43的中序沒有改變。旋轉後的順序依然沒有變化,15-22-x-43-a-75
其實我這裡還有一些疑問,如果x是在43的右節點,那麼就不能將x作為22的右節點,而是將43作為22的右節點,x作為22的父親,結果是這樣樣子嗎,我還不太清楚,等我繼續學習了以後再來修補這個問題
rr旋轉與ll旋轉相對應
rl旋轉與lr旋轉相對應,原理都是一樣的,保持中序不變,旋轉改變平衡。
接下來會學習文中提到的疑問,和紅黑樹的旋轉,紅黑樹不僅要求中序和平衡,還要求紅黑平衡,因此難度會更大一些。
平衡二叉樹(樹的旋轉)
平衡二叉樹建立在二叉排序樹的基礎上,目的是使二叉排序樹的平均查詢長度更小,即讓各結點的深度盡可能小,因此,樹中每個結點的兩棵子樹的深度不要偏差太大。平衡二叉樹的遞迴定義 平衡二叉樹是一棵二叉樹,其可以為空,或滿足如下2個性質 左右子樹深度之差的絕對值不大於1。左右子樹都是平衡二叉樹。平衡因子的概念 ...
平衡二叉樹(樹的旋轉)
平衡二叉樹建立在二叉排序樹的基礎上,目的是使二叉排序樹的平均查詢長度更小,即讓各結點的深度盡可能小,因此,樹中每個結點的兩棵子樹的深度不要偏差太大。平衡二叉樹的遞迴定義 平衡二叉樹是一棵二叉樹,其可以為空,或滿足如下2個性質 左右子樹深度之差的絕對值不大於1。左右子樹都是平衡二叉樹。平衡因子的概念 ...
二叉平衡樹的旋轉操作
旋轉是很多二叉平衡樹維持平衡的主要手段,在這裡複習一下。其實旋轉過程中節點位置的變化只要遵循乙個原則就行了 比root小的在左子樹,比root大的在右子樹。當然這裡前提條件是左小右大 情況一 插入f節點導致失衡 這裡失衡的是a的左右子樹,很容易就可以想到旋轉b a鏈,值得注意的是e節點,它原先在b的...