Two Sum IV

来源:互联网 发布:淘宝微淘关注店铺收藏 编辑:程序博客网 时间:2024/05/19 18:42

题目描述:

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

分析:

直接在二叉树上进行搜索比较困难,可以先采用前序遍历将二叉树转换成有序数组,然后采用首位指针的方式搜索结果。

代码:

/** * 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) {        if(root == null){            return false;        }        List<Integer> result = BST2Array(root);        if(result == null || result.size() <= 1){            return false;        }        // 首尾遍历有序数组        int i = 0;        int j = result.size()-1;        while (i < j){            int sum = result.get(i) + result.get(j);            if(sum == k){                return true;            }            if(sum < k){                i++;            }else {                j--;            }        }        return false;    }    private  List<Integer> BST2Array(TreeNode root) {        if(root == null) {            return null;        }        // 前序遍历        List<Integer> result = new ArrayList<>();        List<Integer> left = BST2Array(root.left);        List<Integer> right = BST2Array(root.right);        if(left != null){            result.addAll(left);        }        result.add(root.val);        if(right!= null){            result.addAll(right);        }        return result;    }}



原创粉丝点击