我在一些論文中看到了這一點,有人認爲我們刪除AVL樹的節點時最多可以有log(n)次旋轉。我相信我們可以通過生成儘可能不平衡的AVL樹來實現這一點。問題是如何做到這一點。這將有助於我研究移除旋轉事物。非常感謝!如何生成儘可能不平衡的AVL樹?
5
A
回答
9
如果你想一個最大不平衡的AVL樹,你正在尋找一個Fibonacci tree,這是歸納定義如下:
- 的0階斐波那契樹是空的。
- 1階的斐波那契樹是單個節點。 的n階+ 2
- 斐波那契樹是其左孩子的n階,其右子斐波那契樹是爲了斐波那契樹N + 1
例如一個節點,這裏有一個斐波那契的順序5樹:
斐波那契樹表示AVL樹可以具有歪斜的最大量,因爲如果平衡因子是任何更多的不平衡每個節點的平衡係數將超過限制放置由AVL樹木。
你可以使用這個定義很容易產生一邊倒最大AVL樹:
function FibonacciTree(int order) {
if order = 0, return the empty tree.
if order = 1, create a single node and return it.
otherwise:
let left = FibonacciTree(order - 2)
let right = FibonacciTree(order - 1)
return a tree whose left child is "left" and whose right child is "right."
希望這有助於!
+1
好的答案。如果只是有一個圖像去與它。 – 2012-01-25 05:23:26
+0
(特別注意,每個非葉子具有不同於0的平衡「因子」)。 –
相關問題
- 1. AVL樹平衡
- 2. 平衡AVL樹
- 3. 不平衡的AVL樹檢查功能
- 4. 平衡AVL樹haskell
- 5. 自平衡avl樹
- 6. AVL樹的平衡因素
- 7. 平衡一個AVL樹(C++)
- 8. 重新平衡AVL樹
- 9. 保持AVL樹平衡而不旋轉
- 10. C++中的AVL樹重新平衡
- 11. 什麼是AVL樹的平衡因子
- 12. AVL樹中節點的平衡因子
- 13. 生成平衡二叉樹
- 14. 爲什麼我的AVL樹刪除功能不平衡?
- 15. 如何找到不平衡AVL樹的類型?
- 16. 自平衡AVL樹內存泄漏
- 17. AVL樹完美平衡問題
- 18. 維基百科的一個不平衡AVL樹的例子是如何不平衡的?
- 19. 平衡如何平衡B-樹
- 20. 二元搜索樹通過旋轉平衡(在AVL樹上)
- 21. 將不平衡樹轉換爲生成樹
- 22. 更新AVL樹節點的平衡因子
- 23. 試圖平衡AVL樹當添加(插入):Java的
- 24. 無法平衡AVL樹中的根節點
- 25. 低內存使用率的自平衡AVL樹?
- 26. AVL樹不能計算樹的高度
- 27. AVL平衡樹 - 打印最後10個節點
- 28. AVL樹是否需要多次重新平衡?
- 29. 平衡KD樹
- 30. 不平衡二叉樹
另請參閱:http://stackoverflow.com/questions/19622572/how-to-generate-maximally-unbalanced-avl-trees –