/**
* 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
}