我的bst必須能夠處理重複條目。有沒有人有如何去做這個不需要過多的代碼的任何策略? 我想一直往右邊添加重複的東西,但那樣會弄亂bst的順序。例如,當副本有兩個孩子又有兩個孩子時會發生什麼?插入副本很容易,但要替換的節點要做什麼?處理bst中的重複
回答
您可以將二叉搜索樹的節點變爲鏈接列表。
class Data implements Comparable<Data>
{
// These are the data elements in your binary search tree
}
class TreeNode
{
TreeNode left; // elements less than current node, or null
TreeNode right; // elements greater than current node, or null
List<Data> items = new LinkedList<Data>();
}
這裏,treeNode.items
始終是一個非空列表,這樣item1.compareTo(item2) == 0
爲每item1
和treeNode.items
item2
。
要插入一個重複元素,您可以找到相關的TreeNode
對象並將其添加到items
。
查找元素的邏輯幾乎與以前一樣,除了一旦找到相關的TreeNode
對象,您必須遍歷鏈表。
只要它不是一個自平衡BST,我不會看到在等於它們的節點的左側或右側放置相等節點的問題。
編輯(simonn後的備註):
如果有問題的「複製節點」已經有2個孩子,後來乾脆將「新的複製節點」到左邊,讓左邊的孩子「舊副本節點「成爲」新副本節點「的左側子節點。
讓我來舉個例子來說明一下。將重複前的樹:
4'
/\
2 5
/\
1 3
而現在的元素4''
插入:
4'
/\
4'' 5
/
2
/\
1 3
只要樹不是自平衡,你應該沒問題。
嗨,我不是這個問題的原始海報。如果我們有自我調整的BST,請您詳細說明這個問題嗎? 什麼根據你應該是一個自我調整BST的財產?我相信,在節點被刪除後它必須重新組織。 即使在這種情況下,我也沒有發現任何問題將重複的元素添加到要複製的節點的左側或右側。 – dharam 2012-06-05 06:08:59
我想知道你是否真的需要將重複條目存儲爲單獨的節點?將一個計數器變量添加到Node是否足夠?這樣,如果遍歷樹,您將知道重複條目的數量並仍然保持順序。
感謝你的這個想法。 – volk 2012-08-21 02:36:52
- 1. 跟蹤重複的BST
- 2. C++ BST和文件處理
- 3. 刪除BST中的重複元素
- 4. BST中的重複情況如何?
- 5. C++:計數在BST中的重複項
- 6. 處理重複的字段
- 7. 重複的錯誤處理
- 8. 處理重複的Python
- 9. 模板處理,串重複{{重複5}}
- 10. 處理MPEG2-TS中的重複數據
- 11. 處理ng-repeat中的重複元素
- 12. 在rails中處理重複的表格
- 13. 處理SSRS參數中的重複項
- 14. 如何處理scrapy中的重複項?
- 15. 處理RavenDB中的重複問題
- 16. 集合中的重複鍵處理
- 17. XMPP MUC中的重複消息處理
- 18. 在模板中處理重複的值
- 19. 在python中處理重複的行
- 20. 如何處理SQL中的重複行?
- 21. 處理NSTokenField中的重複選擇
- 22. 類處理,重複代碼
- 23. mysql查詢處理重複
- 24. ImageList.ImageCollection如何處理重複?
- 25. schema.org重複內容處理
- 26. 在後臺重複處理?
- 27. 重複異常處理
- 28. 重複`DataFrame`處理工作?
- 29. Grails重複異常處理
- 30. PHP處理重複元素
我猜BST是二叉搜索樹嗎? – 2009-10-10 11:57:59