當試圖將一組數字排序到二叉查找樹中時,是否總是有一種方法來排序它們,使樹具有最短高度,換句話說最有效?排序二分查找樹
排序二分查找樹
回答
一組數字可以通過將一個元素作爲樹的根並將其排列在其周圍的所有其他數字來轉換爲BST。我可以看到下面的情況與這個理論相矛盾:
選取一個根導致高度爲h
的樹,其中左子樹比右子樹'高'。 挑選另一根導致另一棵樹,也是高度h
,右側子樹比左側子樹'高'。
另一個簡單的例子包括交換兩個連續元素的插入順序,這兩個連續元素不直接相關,因此不會影響樹中每個其他元素的位置。
通過反例來防範。
讓集合S = {0, 1, 2, 3}
。 插入元素融入到二叉搜索樹按以下順序:1, 0, 2, 3
1
/\
0 2
\
3
插入元素融入到二叉搜索樹按以下順序:1, 2, 0, 3
1
/\
0 2
\
3
由於這兩個樹有不同的順序的插入,但兩者都有最小高度,聲明只有一個插入順序提供了一個最小高度的二叉搜索樹是錯誤的。
如果在樹中的元素的實際順序是你很在意,在插入按以下順序集合中的元素:2, 1, 0, 3
2
/\
1 3
/
0
同樣,這棵樹有相同的高度因此表明樹中不同的項目排序也可以生成最小高度的樹。
(旁白)
你總是可以通過第一排序集合的元素,然後不斷地細分有序集合,以確保每一行的平衡和完整的灌裝建立一個最小高度樹。
- 取集合的中值元素。在偶數個元素的情況下,取兩個「中間」元素中較大的元素。這將成爲樹的根。
- 取中位數以下的所有元素。這將成爲根的左子樹。
- 取中位數以上的所有元素。這將成爲根的右側子樹。
- 從這些集合中遞歸地創建左右子樹。
這應該確保你有一個完整的二叉樹,它總是最小的高度。
謝謝,這非常有幫助。但是,是否只有一個具有最小高度的二叉樹的唯一排序? –
這可能是一個定義問題。直覺上,我絕對不會說,但我現在沒有時間發佈完整的證明。 –
可以這麼說,我上面給出的例子(選擇一個根,然後選擇另一個根)只是這種「不同排序」可能發生的一種方式,並且可以通過單個示例輕鬆驗證,此時它將是相反的證明是,對於某個二叉樹,有多於一個插入順序,該樹可以用最小高度構建。 –
- 1. 二分查找樹
- 2. 二分查找樹索引
- 3. 二分查找排序的數組
- 4. 查找二叉樹
- 5. 二叉樹查找
- 6. 如何創建二分查找樹?
- 7. 尋求FOSS二分查找樹庫
- 8. 二分查找樹「包含」功能
- 9. 將排序後的數組插入到二叉查找樹中
- 10. 排序二叉樹F#
- 11. 查找二叉查找樹的高度
- 12. 二分查找樹C++查找操作總是給出0;
- 13. 查找二叉樹高度
- 14. 查找二叉搜索樹
- 15. 展平二叉查找樹
- 16. 遞歸二分查找程序
- 17. 插入二叉樹不排序輸入
- 18. C中的二叉樹插入排序
- 19. 搜索未排序二叉樹
- 20. 排序字母使用二叉樹
- 21. 二叉搜索樹唯一排序?
- 22. 排序的二叉樹遍歷結果
- 23. ocaml的二進制引用樹查找
- 24. 查找功能遞歸二叉樹
- 25. 查找二叉樹的最大深度
- 26. 返回二叉查找樹的高度
- 27. 查找二叉樹的最深節點
- 28. 查找非二叉樹的高度
- 29. 添加並生成二叉查找樹
- 30. 查找二叉樹的根值?
這是樹本身的元素的排序,還是插入的一組數字的排序? –