Path Sum & Path Sum II | LeetCode DFS
2017-07-06 17:10
495 查看
Description 1
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,
return true, as there exist a root-to-leaf path 5->4->11->2 which sum is 22.
Difficulty: Easy
Thinking 1
判断给定二叉树中是否存在从根节点到叶子节点沿路累加,总和为指定值的路径,用递归函数解决即可。递归基为某叶子节点的值等于sum;递归步骤为return (hasPathSum(root -> left, sum - root -> val) || hasPathSum(root -> right, sum - root -> val))
递归过程从根节点开始,若该节点值不等于sum,则sum减去该节点值,再继续对左子树或右子树进行判断,一边成立即可。
Solution 1
class Solution { public: bool hasPathSum(TreeNode* root, int sum) { if(!root) return false; if(root -> val == sum && root -> left == NULL && root -> right == NULL) return true; else return (hasPathSum(root -> left, sum - root -> val) || hasPathSum(root -> right, sum - root -> val)); } };
Description 2
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,
return
Difficulty: Medium
Thinking 2
与上一题相同,也用递归的方法从根节点开始使sum沿路径递减,至最后一个叶子节点的值与sum相等则保存该路径。需要设置一个vector path存储路径,一个二维vector result保存所有路径。将遍历过程遇到的节点存储到path中,若沿一条路径匹配成功,则将path存入result中,再从path尾部将节点pop,返回到上一个分叉节点;若匹配不成功,则直接将尾部节点pop,返回上一个分叉节点。
Solution 2
class Solution { public: vector<vector<int>> pathSum(TreeNode* root, int sum) { vector<vector<int>> result; vector<int> path; FindPath(root, sum, result, path); return result; } private: void FindPath(TreeNode* node, int sum, vector<vector<int>>& result, vector<int>& path){ if(!node) return; path.push_back(node -> val); if(!(node->right) && !(node -> left) && sum == node -> val){ result.push_back(path); } FindPath(node->left, sum - node -> val, result, path); FindPath(node -> right, sum - node -> val, result, path); path.pop_back(); } };
相关文章推荐
- 【LeetCode】Unique Paths I && II && Minimum Path Sum
- [Leetcode]Path Sum&Path Sum II
- LeetCode 113 Path Sum II (DFS)
- 【leetcode】Path Sum I && II
- LeetCode-Path Sum II<ERROR>
- LeetCode 113. Path Sum II DFS求解
- [LeetCode 112 113] - 路径和I & II (Path Sum I & II)
- LeetCode之“树”:Path Sum && Path Sum II
- [Leetcode] #112#113 Path Sum I & II
- Leetcode | Path Sum I && II
- LeetCode:Path Sum I &&II
- [Leetcode]Path Sum && Path Sum II
- 【LeetCode】path-sum i&ii
- [leetcode]_Path Sum I && II
- [LeetCode] Unique Paths && Unique Paths II && Minimum Path Sum (动态规划之 Matrix DP )
- [LeetCode] Path Sum && Path Sum II
- 【leetcode】Path Sum I & II(middle)
- 2017.10.29 LeetCode - 113. Path Sum II【DFS的运用】【补】
- LeetCode | Unique Paths & II & Minimum Path Sum
- [leetcode][tree][dfs] Path Sum II