原题:两数之和 IV - 输入 BST
方法一:
中序遍历,有序存放到一个数组中,通过两数之和 II - 输入有序数组(golang)即可解。
func findTarget(root *TreeNode, k int) bool {
arr := DFS(root)
for l, r := 0, len(arr)-1; l < r; {
sum := arr[l] + arr[r]
if sum < k {
l ++
} else if sum > k {
r --
} else {
return true
}
}
return false
}
func DFS(node *TreeNode) []int {
// 左根右
if node == nil {
return []int{}
}
arr := DFS(node.Left)
arr = append(arr, node.Val)
arr = append(arr, DFS(node.Right)...)
return arr
}
方法二:
类似两数之和(golang)使用map存储已经遍历过结点值
func findTarget(root *TreeNode, k int) bool {
m := make(map[int]bool)
return DFS(root, k, m)
}
func DFS(node *TreeNode, k int, m map[int]bool) bool {
if node == nil {
return false
}
if _, ok := m[k-node.Val]; ok {
return true
}
m[node.Val] = true
if DFS(node.Left, k, m) || DFS(node.Right, k, m) {
return true
}
return false
}
有疑问加站长微信联系(非本文作者)