我們可以將BST的節點放入HashMap或HashSet中嗎?如果是的話,我們如何遍歷BST。在我解決TWO SUM BST時出現這個疑問。是否可以將二叉搜索樹的節點添加到哈希集或散列圖
回答
是的,你可以。二叉搜索樹具有與其他任何數據相似的數據,並且該數據可以存儲在Java中的任何其他類型的集合中。在我告訴你如何遍歷BST之前,讓我解釋一下你不知道的情況。
二叉搜索樹是一種組織數據的方式。頂層節點通常被稱爲根節點,任何小於它的數據都將被放在它的左邊,任何大於它的數據都將被放在它的右邊。這些被稱爲它的孩子,另一個節點被稱爲父親。例如,如果你的root是2,那麼它將放在它的左邊,而3將放在它的右邊。但是,節點最多隻能有2個子節點,左右分支最多隻能有1個長度。如果它們相差多於一個,則需要進行一些交換。
要遍歷樹,必須先從左分支開始。隨着每個級別的下降,您必須首先檢查節點是否有左孩子。如果確實如此,那就往下走一級。繼續下去,直到沒有剩下的孩子。這意味着這是最低的價值。上升一級,把它作爲你的下一個價值。如果它有一個正確的孩子,那麼接下來一個。繼續,直到你到達根。接下來,取根。最後,用相同的邏輯遍歷右邊的分支。去第一個右邊的孩子,只有在沒有離開孩子的情況下才可以。如果是這樣,請帶走最遠的孩子。然後帶上父母。繼續下去,直到你到達最遠的正確孩子,這將是你的最高價值。
您可以將BinarySearchTree的節點放入HashSet或HashMap(不知道Map的Key,Value配對是什麼)。對於HashSet,我只是簡單地遍歷BST。爲了解決你給的問題,我會解決這個問題,如下所示:
// Returns true if the BST contains two nodes with elements that
// sum to k, otherwise false
public bool findTarget(TreeNode root, int k){
if(root == null){
throw new NullPointerException();
}
HashSet<Integer> set = new HashSet<Integer>();
return traverse(root, k, set);
}
// Traverses across the BST, in order, adding elements to the set
bool traverse(Node<T> node, int k, HashSet<Node<T>> set){
// If the node has a left child, traverse it first
if(node.left != null){
return traverse(node.left, k, set);
}
// Check to see if the set contains the element that would sum
// with the node we're checking's element to equal k
if(set.contains(k-node.element)){
return true;
}
// Add node's element to the set
set.add(node.element);
// If the node has a right child, traverse it after
if(node.right != null){
return traverse(node.right, k, set);
}
else{
// No two node's with elements summing k exist in the BST,
// since you reached the end and found nothing
return false;
}
}
謝謝!那會的。 –
@Darth_dk您可能想要注意這種算法的時間複雜性。由於HashSet的O(1)add()和contains()方法,traverse()將被稱爲最壞情況BST.size時間,並且每個遍歷()中的複雜度將保持不變。所以,如果你感興趣,時間複雜度將會是O(BST.size) –
- 1. 將節點插入二叉搜索樹
- 2. 將節點添加到二叉搜索樹隨機刪除節點
- 3. 可能的具有以下節點的二叉搜索樹和二叉樹
- 4. 檢查節點是否是二叉搜索樹的根。
- 5. 二叉樹到二叉搜索樹(BST)
- 6. 如何添加一個節點在二叉搜索樹
- 7. 檢查二叉樹是否爲二叉搜索樹的函數?
- 8. 將節點插入二叉搜索樹/鏈接列表中?
- 9. 二叉搜索樹乘以-1的節點乘以
- 10. 二叉搜索樹遞歸添加
- 11. 線性搜索或二進制搜索或二叉搜索樹
- 12. 使用二叉搜索樹實現哈希表
- 13. 什麼是二叉搜索樹中的「內部節點」?
- 14. 將懶惰刪除方法添加到二叉搜索樹 - java
- 15. 將元素添加到二叉搜索樹
- 16. 將對象添加到二叉搜索樹
- 17. 二叉搜索樹
- 18. 二叉搜索樹
- 19. 二叉搜索樹
- 20. 二叉搜索樹
- 21. 二叉搜索樹
- 22. 二叉搜索樹
- 23. 二叉搜索樹
- 24. Java二叉搜索樹 - 計算到節點的路徑長度
- 25. 的二叉搜索樹刪除樹節點不起作用
- 26. 將節點插入BALANCED二叉搜索樹
- 27. 如何找到節點值比二叉搜索樹指定值
- 28. 這棵樹是二叉搜索樹嗎?
- 29. 樹是二叉搜索樹嗎?
- 30. 如何查找並返回二叉樹的最底部(最深節點)節點?二叉搜索樹?
那麼,你到底在想什麼?請告訴我們代碼 – Ravi
這就是問題 _給出一個二叉搜索樹和一個目標編號,如果BST中存在兩個元素,則它們的和等於給定的目標,則返回true ._ 。 公共布爾findTarget(TreeNode根,int k){ } 我實際上卡住了。我計劃將節點值添加到HashSet。如果HashSet由k' - node.value組成,那麼它將返回true。 –