leetcode 합 경로 II

이진 트리? 그리고 경로!

제목
이진 트리와 대상 및 리프 노드에 루트 노드에서 모든 경로를 찾을 수 감안할 때 경로의 합 주어진 대상과 동일하다.
설명 : 잎 노드는 노드에 자식 노드가 없습니다.


예 :
다음 이진 트리 주어, 타겟과 합 = 22

          5
         / \
        4   8
       /   / \
      11  13  4
     /  \    / \
    7    2  5   1

반환 값 :
[
[5,4,11,2],
[5,8,4,5]
]

주제 분석

  • 목표 : 그것의 접속점 ⇒ 잎 노드에 루트에서 시작하는 모든 경로를 찾을 수는 목표 값과 동일
  1. 잎 노드에 루트에서 경로를 찾기 ⇒ 재귀 솔루션을
  2. 노드 목표치 경로 ⇒ 추가의 합과 동일하면

문제 해결 아이디어

변수 효과
찾기() 경로 기능을 추구

방법

  1. 노드의 경로를 업데이트하기 위해 현재 노드를 추가 ⇒ 및
  2. 조건이 응답 경로를 추가 ⇒ 만족되면 리프 노드가 노드를 상기 목표 값의 합과 현재 노드와 동일한 분석되고
  3. 왼쪽 하위 트리의 현재의 노드에 빈 ⇒ 갱신 왼쪽 자식 노드를 반복 2,3,4없는 경우
  4. 오른쪽 하위 트리 현재 노드 빈 ⇒ 갱신 우측 자식 노드를 반복 2,3,4없는 경우

다음 코드는

void find(TreeNode*root, int add, int sum, vector<int> path, vector<vector<int>> &ans)
 {
     add += root->val;                             //更新结点和
     path.push_back(root->val);                    //当前结点加入路径
     if(add == sum&&!root->left&&!root->right) ans.push_back(path);  
        if(root->left) find(root->left,add,sum,path,ans);
        if(root->right) find(root->right,add,sum,path,ans);
 } 
class Solution {
public:
    vector<vector<int>> pathSum(TreeNode* root, int sum) {
        if(!root) return{};
        vector<vector<int>> ans;
        vector<int> path;
        int add =0;
        find(root, add, sum, path, ans);
        return ans;
    }
};
게시 34 개 원래 기사 · 원의 칭찬 0 · 조회수 576

추천

출처blog.csdn.net/Luyoom/article/details/104860955