第二十周(Path Sum II)

第二十周(Path Sum II)

目录:

  • 本周完成题目
  • 主要过程思路
  • 相关代码

一、本周完成题目

本周共完成1道题目,1道Medium。

具体完成题目及难度如下表:

# Title Difficulty
113 Path Sum II Medium

题目内容

1、Path Sum II 
Given a binary tree and a sum, find all root-to-leaf paths where each path’s sum equals the given sum.

For example:
Given the below binary tree and sum = 22,
          5
         / \
        4   8
       /   / \
      11  13  4
     /  \    / \
    7    2  5   1

return
[
   [5,4,11,2],
   [5,8,4,5]
]

题目大意:给定一个二叉树和一个和,找到所有的路径使得路径上的值相加等于所给的值sum。

二、主要过程思路

1、Path Sum II:

本题的思路比较明确。主要用到了DFS的思想。对于每条路径,使用深搜的方法进行搜索同时保存当前遍历的路径。如果满足相加和等于sum的情况,则将这条路径保存在paths数组中。反之,将当前节点删除,返回上一个节点继续进行深搜。

三、相关代码

Path Sum II

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    vector<vector<int>> pathSum(TreeNode* root, int sum) {
        vector<vector<int> > paths;
        vector<int> path;
        DFS(root,sum,path,paths);
        return paths;
    }
    void DFS(TreeNode* root, int sum, vector<int  > &path,vector<vector<int> > &paths){
        if(root!=NULL) {
           path.push_back(root->val);
           if(root->right==NULL&&root->left==NULL&&sum==root->val) {
              paths.push_back(path);
           }
         DFS(root-> left, sum - root-> val, path, paths);
         DFS(root-> right, sum - root-> val, path, paths);
         path.pop_back();
        }
    }
};

你可能感兴趣的:(算法设计)