luoheng
10/27/2019 - 4:02 AM

findTarget

/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */

func find(root *TreeNode, k int) bool {
    if root == nil {
        return false
    }
    if root.Val == k {
        return true
    }
    if root.Val > k {
        return find(root.Left, k)
    }
    return find(root.Right, k)
}

func findTarget(root *TreeNode, k int) bool {
    q := []*TreeNode{root}
    for len(q) != 0 {
        r := q[len(q)-1]
        q = q[:len(q)-1]
        if k != 2 * r.Val && find(root, k-r.Val) {
            return true
        }
        if r.Left != nil {
            q = append(q, r.Left)
        }
        if r.Right != nil {
            q = append(q, r.Right)
        }
    }
    return false
}