面试题 25:二叉树中和为某一值的路径
2017-09-05 18:32
316 查看
题目描述:给定一个二叉树,找出所有路径中各节点相加总和等于给定 目标值 的路径。一个有效的路径,指的是从根节点到叶节点的路径。
今天一直被这道题困扰,思路很简单,递归去判断这个要求的和是否和已经走到的这个结点的值相比,如果相等那么一条路径找到,然后再去寻找其他可能存在的路径,直到我们访问到叶子结点为止。
思路很明确,但写代码这个过程还是费了九牛二虎之力,因为有好多问题。其实反过来也说明对这个过程并没有理解清楚。
先给出二叉树的结构:
很明显,现在这个问题是用递归去实现的,不断地找通过累加找那个我们访问到的结点的val。好,下一步,我们来整理下整个问题,假如现在的值已经相等,那么我们需要判断当前结点是否是叶子结点,如果是叶子结点已经找到了一条符合要求的路径,可以将这个路径保存下来了;反之再去访问当前结点的左右孩子结点……按照这个想法,可以写出代码如下。
问题理解的关键在于每次按照一条路径去查找,不管合不合适的时候,最后会将这个父节点pop出来,在重新找出新的路径。
今天一直被这道题困扰,思路很简单,递归去判断这个要求的和是否和已经走到的这个结点的值相比,如果相等那么一条路径找到,然后再去寻找其他可能存在的路径,直到我们访问到叶子结点为止。
思路很明确,但写代码这个过程还是费了九牛二虎之力,因为有好多问题。其实反过来也说明对这个过程并没有理解清楚。
先给出二叉树的结构:
class TreeNode { public: int val; TreeNode *left, *right; TreeNode(int val) { this->val = val; this->left = this->right = NULL; } }
很明显,现在这个问题是用递归去实现的,不断地找通过累加找那个我们访问到的结点的val。好,下一步,我们来整理下整个问题,假如现在的值已经相等,那么我们需要判断当前结点是否是叶子结点,如果是叶子结点已经找到了一条符合要求的路径,可以将这个路径保存下来了;反之再去访问当前结点的左右孩子结点……按照这个想法,可以写出代码如下。
/** * Definition of TreeNode: * class TreeNode { * public: * int val; * TreeNode *left, *right; * TreeNode(int val) { * this->val = val; * this->left = this->right = NULL; * } * } */ class Solution { public: /** * @param root the root of binary tree * @param target an integer * @return all valid paths */ vector<vector<int>> res; vector<int> path; vector<vector<int>> binaryTreePathSum(TreeNode *root, int target) { // Write your code here if(root==NULL) return res; path.push_back(root->val); if(target==root->val && root->left==NULL && root->right==NULL) res.push_back(path); if(root->left) binaryTreePathSum(root->left,target-root->val); if(root->right) binaryTreePathSum(root->right,target-root->val); if(path.size()!=0) path.pop_back(); return res; } };
问题理解的关键在于每次按照一条路径去查找,不管合不合适的时候,最后会将这个父节点pop出来,在重新找出新的路径。
相关文章推荐
- 剑指offer代码解析——面试题25二叉树中和为某一值的路径
- 面试题25_二叉树中和为某一值的路径
- 【面试题】剑指offer25--二叉树中和为某一值的路径
- 剑指Offer_面试题25_二叉树中和为某一值的路径
- 面试题25:二叉树中和为某一值的路径
- 剑指offer代码解析——面试题25二叉树中和为某一值的路径
- 剑指offer 面试题25—二叉树中和为某一值的路径
- 面试题25 二叉树中和为某一值的路径
- 剑指offer-面试题25-二叉树中和为某一值的路径
- 剑指Offer面试题25(Java版):二叉树中和为某一值的路径
- 二叉树中和为某一值的路径(面试题 25)
- 面试题25:二叉树中和为某一值的路径
- 面试题25:二叉树中和为某一值的路径
- 剑指Offer----面试题25:二叉树中和为某一值的路径
- 剑指offer面试题25-二叉树中和为某一值的路径
- 剑指offer——面试题25:二叉树中和为某一值的路径
- 剑指offer-面试题25:二叉树中和为某一值的路径
- 【剑指Offer学习】【面试题25:二叉树中和为某一值的路径】
- 《剑指offer》面试题25:二叉树中和为某一值的路径
- 剑指offer面试题25 二叉树中和为某一值的路径