當兩棵樹相等時?
回答
絕對不是。兩棵樹
b
/\
a d
/\
c e
和
d
/\
b e
/\
a c
都具有a b c d e
的序遍歷。實際上,它們是旋轉,一個操作which preserves inorder traversal。
我在想「不」。
兩棵樹可能有不同的平衡,但具有相同的節點值「順序」。舉例來說,如果設定的
1,2,3,4,5,6,7
的您打造一個樹:
4
2 6
1 3 5 7
中序遍歷將產生1,2,3,4,5,6,7。
但是,如果你選擇一個不同的根節點(如果列表不排序預先正確)
5
4 6
2 7
1 3
這兩棵樹可以得到同樣的中序遍歷結果,但(顯然)不相同。
甚至
7
6
5
4
3
2
1
等等。
這也與BSP(二元空間分區)樹的問題有關,該樹通常用於遊戲開發碰撞檢測和可視性確定。
BSP在樹中存儲三角形。每個節點都包含一個三角形或方面。左側節點包含所有「後面」小孩,而右側小孩則包含「前面」的所有內容。按預期緩步。
如果您選擇場景中最左側的面作爲根,則右側的孩子將擁有其他每個面。如果你爲正確的孩子做出錯誤的決定,同樣的事情會發生。建立一個BSP編譯器是完全可能的,通過白癡分析,構建一個實際上是列表的「樹」(就像我上面的最後一個例子)。問題在於對數據集進行分區,以便每個節點儘可能均等地分割剩餘列表。這是BSP通常在編譯時生成的原因之一,因爲爲非常複雜的幾何構建一個BSP可能需要幾個小時才能找到最佳解決方案。
NO,以及它與這個簡單的例子可見
3 2
2 1 3
1 0
0
兩者都有相同序遍歷[0,1,2,3]
但如果序和預訂遍歷是相同的,那麼樹是相等的。
或者如果順序和順序遍歷是相同的,我們得到了相同的結論。 – h9uest 2015-03-27 11:39:44
- 1. 檢查兩棵樹是否相同
- 2. 比較兩棵樹
- 3. 可拖動的兩棵樹
- 4. 合併兩棵二叉樹
- 5. 合併兩棵樹集合
- 6. 合併兩棵定向樹?
- 7. 如何將一棵樹分割成兩棵子樹
- 8. 證明的最大轉數爲兩棵樹成爲等於
- 9. 等於方法來比較兩棵樹的
- 10. 比較兩棵樹,看看它們是否相同
- 11. 連接/合併/連接兩棵AVL樹
- 12. 查找兩棵樹是否同構
- 13. 我如何合併兩棵二叉樹
- 14. jstree中兩棵樹之間的拖放
- 15. 穿越兩棵樹在一起?
- 16. 僞代碼來比較兩棵樹
- 17. 如果一棵二叉樹是另一棵樹的子樹
- 18. 二叉搜索樹 - 複製一棵樹到另一棵樹
- 19. 展開和摺疊兩棵樹具有相同的結構同時
- 20. OCaml的 - 一棵樹
- 21. 當初始化一棵樹時展開Wickets TreeTable節點
- 22. 當列中有一棵樹時調整表的大小
- 23. 當頁面點擊時動態載入一棵樹
- 24. 給定兩棵樹,你如何找到其中一棵樹是其他的子樹?
- 25. 找到另一棵樹上的一棵樹的節點
- 26. SimpleXML:將一棵樹追加到另一棵樹
- 27. 檢查一棵樹是否是一棵完美的樹
- 28. 證明一棵二叉樹是另一棵的子樹
- 29. 有沒有三棵樹參與React Virtual Dom,或者只有兩棵?
- 30. 這棵樹是二叉搜索樹嗎?
+1我在這個主題上見過的最好的解釋:) – shoebox639 2010-10-22 21:28:18