LeetCode_Path Sum II
2014-02-25 09:00
459 查看
题目
给定一个二叉树,给定一个值,找和的等于这个值的所有路径思路
经典深度优先搜索题,这类题一般都需要一个cur_sum表示当前已经的加和,每递归一层 先加上根节点的值,如果当前节点是叶子节点检测下值是否为所需和,递归结构,先递归左子树,将当前左子节点放入栈,递归完再回溯(删除栈顶),再以同样的方式递归右子树,这题没有1A,忘记考虑空树的情况了
代码
/** * Definition for binary tree * 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) { int cur_sum=0; vector<vector<int>> ans; vector<int> path; ans.clear(); path.clear(); if(root==NULL) return ans; path.push_back(root->val); checkAndRecord(root,sum,cur_sum,ans,path); } bool checkAndRecord(TreeNode *root, int sum ,int cur_sum,vector<vector<int>> &ans,vector<int> &path) //代码风格不好,建树的过程要写一写 { cur_sum = cur_sum + root->val; if (root->left==NULL && root->right==NULL)//到达叶子节点 { if ( cur_sum==sum) { ans.push_back(path); return true; } else return false; } bool flag1=false,flag2=false; if (root->left!=NULL) { path.push_back(root->left->val); flag1=checkAndRecord(root->left,sum,cur_sum,ans,path); path.erase(path.end()-1); } if(root->right!=NULL){ path.push_back(root->right->val); flag2 =checkAndRecord(root->right,sum,cur_sum,ans,path); path.erase(path.end()-1); } return flag1 || flag2; } };
相关文章推荐
- LeetCode学习篇二十四——Path Sum II
- 【leetcode】113. Path Sum II【java】
- LeetCode-Path Sum II
- 【LeetCode】Path Sum II
- leetcode | Path Sum II
- 【LeetCode】Path Sum II 二叉树递归
- [LeetCode] Path Sum II
- leetcode 113 —— Path Sum II
- [LeetCode] Path Sum II
- LeetCode Path Sum II
- LeetCode: 113. Path Sum II
- [Leetcode]Path Sum && Path Sum II
- 【leetCode】Path Sum II python实现
- LeetCode | Path Sum II
- Leetcode NO.113 Path Sum II
- Path Sum II - LeetCode
- 【LeetCode with Python】 Path Sum II
- Leetcode_Path Sum II
- 【Leetcode】Path Sum II (Sum)
- [leetcode] Path Sum II