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

分析

根据题目要求,要注意是两个元素的和构成目标数,不可以是一个元素自己等于目标数,或者一个元素自己加自己等于目标数。

遍历树,对于每个子节点检查是否有另一个节点跟它的和为目标数。

复杂度分析

时间复杂度 O(n2)
空间复杂度 O(1)

因为对于每个节点都要遍历一次树,所以时间复杂度比较高。

贴出代码

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    public boolean findTarget(TreeNode root, int k) {
        return searchBST(root,root,k);
    }

    boolean searchBST(TreeNode root,TreeNode cur, int k){
        if (cur == null){
            return false;
        }
        TreeNode p = root;
        while (p != null){
            if (k == 2 * cur.val){
                break;
            }
            if (k == cur.val + p.val){
                return true;
            }
            if (k > cur.val + p.val){
                p = p.right;
            }else if (k < cur.val + p.val){
                p = p.left;
            }

        }
        return (searchBST(root,cur.left,k) || searchBST(root,cur.right,k));
    }
}
上一篇:LeetCode 653. 两数之和 IV - 输入 BST(Two Sum IV - Input is a BST)


下一篇:LeetCode 538 Convert BST to Greater Tree 解题报告