二叉搜尋樹的和
阿新 • • 發佈:2020-09-06
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
來源:力扣(LeetCode)
著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。