두 갈래 나무와 특정 값을 위한 경로 찾기

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 () 를 사용하여 새 체인 테이블을 계속 추가합니다.

좋은 웹페이지 즐겨찾기