1. 程式人生 > 實用技巧 >二叉搜尋樹的和

二叉搜尋樹的和

653. 兩數之和 IV - 輸入 BST

難度簡單

給定一個二叉搜尋樹和一個目標結果,如果 BST 中存在兩個元素且它們的和等於給定的目標結果,則返回 true。

案例 1:

輸入: 
    5
   / \
  3   6
 / \   \
2   4   7

Target = 9

輸出: True

案例 2:

輸入: 
    5
   / \
  3   6
 / \   \
2   4   7

Target = 28

輸出: False
做題思路:先中序遍歷二叉搜尋樹,然後在二叉搜尋樹中找到k-x且不等於x的值。

方法一:使用 HashSet【通過】
最簡單的方法就是遍歷整棵樹,找出所有可能的組合,判斷是否存在和為 kk 的一對節點。現在在此基礎上做一些改進。

如果存在兩個元素之和為 kk,即 x+y=kx+y=k,並且已知 xx 是樹上一個節點的值,則只需判斷樹上是否存在一個值為 yy 的節點,使得 y=k-xy=k−x。基於這種思想,在樹的每個節點上遍歷它的兩棵子樹(左子樹和右子樹),尋找另外一個匹配的數。在遍歷過程中,將每個節點的值都放到一個 setset 中。

對於每個值為 pp 的節點,在 setset 中檢查是否存在 k-pk−p。如果存在,那麼可以在該樹上找到兩個節點的和為 kk;否則,將 pp 放入到 setset 中。

如果遍歷完整棵樹都沒有找到一對節點和為 kk,那麼該樹上不存在兩個和為 kk 的節點。

作者:LeetCode

連結:https://leetcode-cn.com/problems/two-sum-iv-input-is-a-bst/solution/liang-shu-zhi-he-iv-by-leetcode/
來源:力扣(LeetCode)
著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。