【LeetCode】653. Two Sum IV

来源:互联网 发布:淘宝上买东西分期还 编辑:程序博客网 时间:2024/06/05 17:59

【题目】

Given a Binary Search Tree and a target number, return true if there exist two elements in the BST such that their sum is equal to the given target.

Example 1:

Input:     5   / \  3   6 / \   \2   4   7Target = 9Output: True

Example 2:

Input:     5   / \  3   6 / \   \2   4   7Target = 28Output: False

【分析】

输入是二叉搜索树,二叉搜索树又叫二叉排序树,是一种有序的树,通过遍历可以得到一个有序数组,得到有序数组之后可以采用两指针法从两端向中间遍历,看是否有两个数的和等于target。时间复杂度为最坏为O(h2),最好为O(h),空间复杂度为O(n),n为节点个数。

【代码】

/** * Definition for a binary tree node. * public class TreeNode { *     int val; *     TreeNode left; *     TreeNode right; *     TreeNode(int x) { val = x; } * } */class Solution {    public void middleTraversal(TreeNode root,List<Integer> nums){        if(null==root) return;        middleTraversal(root.left,nums);        nums.add(root.val);        middleTraversal(root.right,nums);    }    public boolean findTarget(TreeNode root, int k) {        //先中序遍历二叉搜索树,存到list中,然后从list中找        List<Integer> nums=new ArrayList<Integer>();        middleTraversal(root,nums);        int len=nums.size();        int i=0,j=len-1;        while(i<j){            if(nums.get(i)+nums.get(j)==k) return true;            while(i<j && nums.get(i)+nums.get(j)<k) ++i;            while(i<j && nums.get(i)+nums.get(j)>k) --j;        }        return false;    }}


原创粉丝点击