0
A
回答
2
排序的元素後,通過定義中間元件是根節點重建樹,然後遞歸地構建分別從前面和後面的中間,元件的左和右子樹。
+0
你可以用合併類似的方法實現這一點。在每一步中,選取原始排序數組的中間元素(如'm'),爲數組的左右部分構建子樹(比如'lt'和'rt'),並創建一個新的子樹,以'm'作爲根和''''''''''兩側的樹。當數組長度爲<= 1時,遞歸自下而上。 –
2
添加一個已排序列表,一個簡單的非平衡二叉搜索樹將建立一個二叉搜索樹的理論最壞情況下樹。該值最低的節點是根,每一個節點添加到立即在列表前面的節點的「權利」,與您共創最大深度的樹,在O(n)的搜索時間,而不是O(LGñ )。你實際上只是在構建一個過於複雜的鏈表。
0
我認爲,如果你重建樹形結構中,嘗試通過前向inorder
插入排序的元素,你所提供的解決方案將是正確的。
- 重建樹。就像堆。
(5) (3) (6) (2) (4) (1)
重構樹是這樣的::
- 插入經由序
例如,如果原來的樹是這樣排序的元素
() () () () () ()
插入通過
inorder
排序的元素:1,2,3,4,5,6(4) (2) (6) (1) (3) (5)
0
我想你可以訪問樹,並可以在「手動」改變它。我覺得你的平衡問題可以解決這樣的(僞):
depth(node)
{
if node is null, return 0;
l = depth(left child);
r = depth(right child);
diff = (r - l);
if (diff < -1) rotate right (as often as you need);
else if (diff > 1) rotate left (as often as you need);
return the new maximum depth of both subtrees +1;
}
我必須承認,我不是很確信這一點,但這個想法是,你並不需要臨時數組,因爲遍歷樹和應用正確的旋轉應該做的。
相關問題
- 1. 獲取二叉搜索樹的高度
- 2. 二叉搜索樹的高度
- 3. 二叉搜索樹的總高度
- 4. 計算二叉搜索樹的高度
- 5. 二叉搜索樹基於節點數量的最大和最小高度
- 6. 二叉樹中最大的二叉樹搜索樹
- 7. 查找二叉搜索樹的最小深度
- 8. Java:二叉搜索的最小深度樹遞歸
- 9. 二叉樹到二叉搜索樹(BST)
- 10. 二叉樹高度
- 11. 二叉搜索樹
- 12. 二叉搜索樹
- 13. 二叉搜索樹
- 14. 二叉搜索樹
- 15. 二叉搜索樹
- 16. 二叉搜索樹
- 17. 二叉搜索樹
- 18. 二叉搜索樹
- 19. 廣度優先搜索遍歷未知高度的二叉樹
- 20. 計算二叉搜索樹的深度?
- 21. 二叉搜索樹 - 查找高度和深度
- 22. 二叉樹的高度
- 23. 二叉樹的最小深度
- 24. 二叉樹搜索值小於
- 25. 二叉搜索樹節點大小
- 26. 二叉搜索樹小計數練習
- 27. 二叉樹廣度優先搜索
- 28. 最優二叉搜索樹 - Cormen
- 29. 二叉搜索樹最大值
- 30. 線程化二叉搜索樹Java
你說的第3步是什麼意思?顯然,按照定義,確保樹是平衡的,從而解決了問題。 –