Two Sum IV - Input is a BST
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
没办法用递归,因为两个节点有可能分别在左右子树上 把BST转换为一个递增序列,然后就是对序列的操作了 定义两个指针,从两边向中间靠,== k 是true, >k就j-- ,<k就i++ 集合的定义List< Integer> data=new ArrayList< Integer>(); 数组的定义int data[] = null 从list中按照索引取数 data.get(i),求list的长度 data.size(),像list中增加数 data.add(root.val);
class Solution {
List< Integer> data= new ArrayList< Integer> ( ) ;
public boolean findTarget ( TreeNode root, int k) {
tolist ( root) ;
int i= 0 ;
int j= data. size ( ) - 1 ;
while ( i< j) {
if ( data. get ( i) + data. get ( j) == k) {
return true ;
}
else if ( data. get ( i) + data. get ( j) > k) {
j-- ;
}
else if ( data. get ( i) + data. get ( j) < k) {
i++ ;
}
}
return false ;
}
List< Integer> tolist ( TreeNode root) {
if ( root== null) {
return data;
}
tolist ( root. left) ;
data. add ( root. val) ;
tolist ( root. right) ;
return data;
}
}