超时代码:只多了一个bool变量就超时了
import java.util.ArrayList; import java.util.List; public class SumBSt { public boolean findTarget(TreeNode root, int k) { if(root==null) return false; List<Integer> list = new ArrayList<>(); inSort(root,list); boolean bool = false; int left=0; int right=list.size()-1; while(left<right){ if(list.get(left)+list.get(right)==k){ bool = true; }else if(list.get(left)+list.get(right)<k){ left++; }else{ right--; } } return bool; } private void inSort(TreeNode root,List<Integer> list){ if(root==null) return; inSort(root.left,list); list.add(root.val); inSort(root.right,list); } }
accpt的代码,把二叉树前序遍历得到list,顺序是从小到大排列的
import java.util.ArrayList; import java.util.List; public class SumBSt { public boolean findTarget(TreeNode root, int k) { if(root==null) return false; List<Integer> list = new ArrayList<>(); inSort(root,list); int left=0; int right=list.size()-1; while(left<right){ if(list.get(left)+list.get(right)==k){ return true; }else if(list.get(left)+list.get(right)<k){ left++; }else{ right--; } } return false; } private void inSort(TreeNode root,List<Integer> list){ if(root==null) return; inSort(root.left,list); list.add(root.val); inSort(root.right,list); } }