两数之和 IV - 输入 BST
给定一个二叉搜索树和一个目标结果,如果 BST 中存在两个元素且它们的和等于给定的目标结果,则返回 true。
案例 1:
输入:
5
/ \
3 6
/ \ \
2 4 7
Target = 9
输出: True
思路+代码+注释:
public boolean findTarget(TreeNode root, int k) {
/*
思路:中序遍历得到一个有序集合,定义i、j,i指向最左边,j指向最右边,求i、j的和sum,如果sum==k那么返回true;
如果sum<k那么和大了j--;如果sum>k那么和小了i++;当i==j时说明不存在返回false
*/
List<Integer> nums=new ArrayList<>();
midBianLi(root,nums);
int i=0;
int j=nums.size()-1;
while (i<j)
{
int sum=nums.get(i)+nums.get(j);
if (sum==k)
{
return true;
}else if (sum<k)
{
i++;
}else {
j--;
}
}
return false;
}
private void midBianLi(TreeNode node, List<Integer> nums)
{
if (node==null)
{
return;
}
midBianLi(node.left,nums);
nums.add(node.val);
midBianLi(node.right,nums);
}