题目:给一棵二叉搜索树以及一个整数 n
, 在树中找到和为 n
的两个数字
样例:
给一棵BST:
4
/ \
2 5
/ \
1 3
以及一个整数 n = 3
返回 [1, 2]
或 [2, 1]
思路:遍历节点,在节点上判断另一个数是否存在
代码:
/**
* Definition of TreeNode:
* public class TreeNode {
* public int val;
* public TreeNode left, right;
* public TreeNode(int val) {
* this.val = val;
* this.left = this.right = null;
* }
* }
*/
public class Solution {
/*
* @param : the root of tree
* @param : the target sum
* @return: two numbers from tree which sum is n
*/
public int[] twoSum(TreeNode root, int n) {
// write your code here
if(root == null)
return null;
int[] sum = new int[2];
toSum(root,root,n,sum);
return sum;
}
public void toSum(TreeNode root,TreeNode t,int n,int[] array){
if(t == null)
return;
if(isExist(root,n-t.val)){
array[0]=t.val;
array[1]=n-t.val;
return;
}else{
toSum(root,t.left,n,array);
toSum(root,t.right,n,array);
}
}
public boolean isExist(TreeNode root,int n){
if(root == null)
return false;
if(root.val < n)
{
return isExist(root.right,n);
}
else if(root.val == n)
{
return true;
}
else
return isExist(root.left,n);
}
}