【题目】
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 7 Target = 9 Output: True
Example 2:
Input: 5 / \ 3 6 / \ \ 2 4 7 Target = 28 Output: 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;
}
}
本文介绍了一种在二叉搜索树中查找是否存在两个元素之和等于给定目标值的方法。首先进行中序遍历获取有序数组,然后利用双指针技巧检查是否存在和为目标值的两个数。
1060

被折叠的 条评论
为什么被折叠?



