剑指offer(13)-二叉树中和为某一值的路径
2016-10-23 22:09
393 查看
题目:输入一棵二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。二叉树结点的定义如下:
解决题目的关键是在进行前序遍历时记录下遍历过的结点,并且在找到满足条件的一条路径后将当前结点删除,很明显需要使用栈或者用其它方式模拟栈。
Leetcode上的变形题目:
112. Path Sum
Given a binary tree and a sum, determine if the tree has a root-to-leaf path such that adding up all the values along the path equals the given sum.
For example:
Given the below binary tree and sum = 22, 5
/ \
4 8
/ / \
11 13 4
/ \ \
7 2 1
return true, as there exist a root-to-leaf path 5->4->11->2 which sum is 22.
struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { } };
解决题目的关键是在进行前序遍历时记录下遍历过的结点,并且在找到满足条件的一条路径后将当前结点删除,很明显需要使用栈或者用其它方式模拟栈。
class Solution { public: vector<vector<int> > FindPath(TreeNode* root,int expectNumber) { vector<vector<int> > pathAll; if (root == NULL) return pathAll; vector<int> path; int currentSum = 0; FindPath(root,expectNumber,path,currentSum,pathAll); return pathAll; } void FindPath(TreeNode* pRoot,int expectNumber,vector<int> &path,int currentSum,vector<vector<int> > &pathAll2){ currentSum += pRoot->val; path.push_back(pRoot->val); bool isLeaf = (pRoot->left == NULL) && (pRoot->right == NULL); if (currentSum == expectNumber && isLeaf) { pathAll2.push_back(path); } if (pRoot->left != NULL){ FindPath(pRoot->left,expectNumber,path,currentSum,pathAll2); } if (pRoot->right != NULL){ FindPath(pRoot->right,expectNumber,path,currentSum,pathAll2); } path.pop_back(); } };
Leetcode上的变形题目:
112. Path Sum
Given a binary tree and a sum, determine if the tree has a root-to-leaf path such that adding up all the values along the path equals the given sum.
For example:
Given the below binary tree and sum = 22, 5
/ \
4 8
/ / \
11 13 4
/ \ \
7 2 1
return true, as there exist a root-to-leaf path 5->4->11->2 which sum is 22.
class Solution { public: bool PathSum(TreeNode* node, int CurrentNumber, int sum) { if (node == NULL) return false; if (node->left == NULL && node->right == NULL) return CurrentNumber + node->val == sum; return PathSum(node->left, CurrentNumber + node->val, sum) || PathSum(node->right, CurrentNumber + node->val, sum); } bool hasPathSum(TreeNode* root, int sum) { return PathSum(root, 0, sum); } };
相关文章推荐
- 剑指Offer(24)______二叉树中和为某一值的路径
- 《剑指Offer》面试题25:二叉树中和为某一值的路径
- 剑指offer:二叉树中和为某一值的路径
- 剑指Offer系列-面试题25:二叉树中和为某一值的路径
- 剑指Offer:二叉树中和为某一值的路径
- 剑指offer:二叉树中和为某一值的路径
- 剑指offer系列源码-二叉树中和为某一值的路径
- 剑指offer 二叉树中和为某一值的路径 java实现
- 剑指offer系列之二十三:二叉树中和为某一值得所有路径
- 《剑指offer》面试题25:二叉树中和为某一值的路径
- 《剑指offer》刷题笔记(举例让抽象具体化):二叉树中和为某一值的路径
- 剑指Offer(34)二叉树中和为某一值的路径
- [剑指offer学习心得]之:二叉树中和为某一值的路径
- 《剑指offer》-二叉树中和为某一值的路径
- 剑指offer(四十九)之二叉树中和为某一值的路径
- 剑指Offer——二叉树中和为某一值的路径
- 剑指offer --- 二叉树中和为某一数的路径
- 剑指offer_二叉树---二叉树中和为某一值的路径
- 《剑指offer》二叉树中和为某一值的路径
- 剑指Offer(Java版):二叉树中和为某一值的路径