两数之和 IV - 输入 BST(golang)

原题:两数之和 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
}

你可能感兴趣的:(两数之和 IV - 输入 BST(golang))