我想擴充二叉搜索樹,以便在O(h)時間內仍支持搜索,插入和刪除操作,然後我想實現一個算法來查找給定範圍內所有節點值的總和。通過增大BST值,找到值在特定範圍內的二叉搜索樹中的節點總數
1
A
回答
2
如果向BST類添加其他數據結構,特別是Hashmap
或Hashtable
。您的keys
將是您的BST包含的不同數字,以及您的values
每個數字的出現次數。 BST search(...)
不會受到影響,但insert(...)
和delete(...)
將需要輕微的代碼更改。
插入
當添加節點到BST檢查,看是否該值在HashMap中存在的一個關鍵。如果它由1存在增量出現次數。如果它不存在,將它添加到HashMap中與1
的初始值刪除
當刪除減量HashMap中的出現次數(假設你沒有被告知要刪除不存在的節點)
總和
現在的和F結
sum(int start, int end)
您可以反覆檢查你的HashMap來看看它在你的地圖和他們的出現次數存在從範圍內的數字。使用這個,您可以通過將地圖中所有值在範圍乘以其出現次數的值相加來構建出您的總和。
複雜性
空間:O(n)的時間 總和的方法:O(範圍大小)。
所有其他方法時間複雜度不受影響。
你沒有提到空間限制,所以希望這是好的。我很感興趣,看看你是否可以使用BST的特性來更高效地解決這個問題。
相關問題
- 1. 二叉樹到二叉搜索樹(BST)
- 2. 如何找到節點值比二叉搜索樹指定值
- 3. 在二叉搜索樹中找到節點的父節點
- 4. 二叉搜索樹bst
- 5. 二叉搜索樹(BST)
- 6. 找到具有當前節點值的下一個值在二叉搜索樹
- 7. 二叉搜索樹節點大小
- 8. 在二叉搜索樹中搜索值
- 9. 遞歸計算二叉搜索樹中的特定節點
- 10. 二叉搜索樹最大值
- 11. 在二叉樹中計算具有特定值的節點
- 12. 最大的子樹哪個是二叉搜索樹(BST)
- 13. 在二叉搜索樹中查找最近的節點
- 14. 二叉搜索樹,你如何找到最大值?
- 15. 非遞歸BST(二叉搜索樹)
- 16. 如何通過樹搜索找到一組節點的值的最大和
- 17. 查找二叉樹中節點的深度不是BST
- 18. 二叉搜索樹 - 最左邊的節點總是包含最小值?
- 19. 二叉樹中最大的二叉樹搜索樹
- 20. C#查找二進制搜索樹中的特定節點
- 21. 範圍在BST中搜索
- 22. 在二進制搜索樹的範圍內打印總和
- 23. 從刪除節點二叉搜索樹
- 24. 二叉搜索樹節點刪除
- 25. 二叉搜索樹刪除節點
- 26. 將節點插入二叉搜索樹
- 27. 如何刪除特定節點是二叉搜索樹?
- 28. 什麼是二叉搜索樹中的「內部節點」?
- 29. 二叉搜索樹特例
- 30. 返回值爲二值搜索樹的特定節點的深度
聽起來像一個偉大的目標。你有什麼嘗試?你有哪個部分有問題。已經有很多關於二叉樹的文檔可以參考。 – miltonb
嗯,我環顧四周,唯一接近這個問題,我發現是使用不是一個擴增的分段樹。我還找到了一個基本上使用AVL樹的解決方案。但是我想擴充BST,然後在特定的範圍內找到節點的總和。我試圖從下到上向每個節點添加累積和,但是之後我堅持下去。我真的不知道這件事。 –