lintcode-2つの数の和-BSTバージョン
1606 ワード
テーマ:一本の二叉に木と一つの整数を検索します.
サンプル:
一本のBSTをあげる:
コード:
/** * 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 * @パラム: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 book is Exist(TreeNode root,int n){ if(root==null) return false; if(root.val
n
、木の中で見つけられます. n
の2つの数字サンプル:
一本の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 * @パラム: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 book is Exist(TreeNode root,int n){ if(root==null) return false; if(root.val