當我在中期研究二叉樹時,發現任何任意的n節點二叉樹可以轉換成任何其他n節點二叉樹,最多2 * n-2個旋轉。有沒有證據呢?我發現了一些有漸近符號的證明,但它並不那麼清楚。我的意思是有人可以解釋/說明它爲什麼是真的?如果它說n節點二叉樹,它是否包含根?使用旋轉的二叉樹轉換
3
A
回答
3
本答案來自CLRS第3版教材13.2-4。
讓
左=整個左鏈表二叉樹
RIGHT =整個右鏈表二叉樹。
在(n-1)旋轉中,您可以輕鬆地將左旋轉至右旋 。
e.g: n = 3 3 2 1 2 to 1 3 to 2 1 3
證明: 由於根據定義,各右旋轉將增加的最右邊的路徑長度由至少1。因此,從與長度爲1(最差情況)最右邊的路徑開始,則需要最多(n-1)旋轉以使其進入右側。因此,你可以很容易得出結論,任何具有n個節點的二叉樹的任意形狀都可以在(n-1)個旋轉內旋轉爲RIGHT。 設T_1爲您開始的節點 設T_2爲您結束的節點。
您可以在(n-1)次旋轉內將T_1旋轉到右側。 同樣, 您可以在(n-1)次旋轉中將T_2旋轉到RIGHT。
因此,要將T_1旋轉到T_2,只需將T_1旋轉到RIGHT,然後執行反轉從RIGHT旋轉到T_2。因此,你可以在(n-1)+(n-1)= 2n-2的上限旋轉中做到這一點。
Hope this helps!=) Soon Chee Loong, University of Toronto
0
如果語句引用二叉樹而不是BST樹,我認爲該語句是有效的,因爲沒有對節點順序的限制。一個簡單的數學歸納應該證明這個說法。
相關問題
- 1. 二叉樹旋轉
- 2. 二叉樹的旋轉功能
- 3. 二叉樹轉移
- 4. 將二叉樹轉換爲雙線程二叉樹?
- 5. 將鏈表轉換爲二叉樹
- 6. 將表達式轉換爲二叉樹
- 7. 如何扭轉二叉樹
- 8. Recusively翻轉二叉樹
- 9. 轉換通用樹二叉樹 - XML解析器
- 10. 可能的旋轉次數。二叉搜索樹
- 11. 如何平衡PHP中的二叉樹而不旋轉父級?
- 12. 將玫瑰樹轉換爲不同的二叉樹類型
- 13. 如何將打包在數組中的inode(LDR)二叉樹轉換回C++中使用文件的二叉樹
- 14. 二叉搜索樹;自組織搜索/旋轉C++
- 15. 通過旋轉ANSI C平衡二叉樹
- 16. Python - 將n元樹轉換爲二叉樹
- 17. 如何將樹轉換爲線程化二叉樹
- 18. 將N元表達式樹轉換爲二叉樹
- 19. 轉換二叉樹 - > BST(保持原始樹形狀)
- 20. 用於將表達式轉換爲二叉樹的算法
- 21. 轉換二叉樹的嵌套列表的列表
- 22. 如何證明從競爭二叉樹到數組的轉換?
- 23. 將Zigzag順序中的二叉樹轉換爲雙向鏈表
- 24. 將二叉搜索樹轉換爲JAVA中的鏈接列表
- 25. 插入二叉樹的一個節點 - 轉換迭代遞歸
- 26. 中綴向二叉樹轉換器的錯誤輸出
- 27. Java:將二叉搜索樹轉換爲字符串的方法
- 28. 將二叉樹轉換爲排序數組
- 29. 將二叉搜索樹轉換爲雙向鏈表
- 30. 將二叉樹轉換爲排序數組
這聽起來不對,因爲旋轉不會改變節點的順序。你確定沒有其他限制嗎? – Beta
http://repository.cmu.edu/cgi/viewcontent.cgi?article=2663&context=compsci也許你想參考這篇論文。 –