두 갈래 나무와 특정 값을 위한 경로 찾기
11633 단어 Java 브러시
1. 앞의 순서, 뒤의 순서와 중간의 순서가 두루 다닌다.2. 넓이 우선, 깊이 우선 반복;
이 문제에 대한 경로 찾기: 긍정시 깊이 우선;오류 코드:
class Solution {
List<List<Integer>> res=new LinkedList();
LinkedList<Integer> path=new LinkedList();
public List<List<Integer>> pathSum(TreeNode root, int sum) {
return dfs(root,sum) ;
}
public List<List<Integer>> dfs(TreeNode root,int sum){
~~~~if(root==null){~~
if(sum==0){
res.add(path);
}else{
path.removeLast();
}
}~~ // , root ,sum 0, 。root sum 0 if , , if ;
path.add(root.val);
sum=sum-root.val;
dfs(root.left,sum);
dfs(root.right,sum);
return res;
}
}
정확한 작법은 다음과 같다.
class Solution {
List<List<Integer>> res=new LinkedList();
LinkedList<Integer> path=new LinkedList();
public List<List<Integer>> pathSum(TreeNode root, int sum) {
dfs(root,sum) ;
return res;
}
public void dfs(TreeNode root,int sum){
if(root==null){
return ;
}
sum=sum-root.val;
path.add(root.val);
if(sum==0&&root.left==null&&root.right==null){
res.add(new LinkedList(path));//
}
dfs(root.left,sum);
dfs(root.right,sum);
path.removeLast();
}
}
두 가지 차이는 경계 조건의 처리에 있다.
if(sum==0&&root.left==null&&root.right==null){
res.add(new LinkedList(path));//
}
이 부분에서 제가 처음에 실수를 했어요. 바로 그거예요.
res.add(path);// [[],[]]
체인 테이블res에서 모든 값과 모든 요소(체인 테이블)는 새로운 체인 테이블(new Linked List ()이기 때문에 이 새 체인 테이블은 path의 값과 같다.이것이 바로 내가 처음에 path로 채워서 요구를 충족시키고 비우는 방법을 생각했던 문제이다.위의 new LinkedList () 를 사용하여 새 체인 테이블을 계속 추가합니다.