[Leetcode 112, Easy] Path sum I
来源:互联网 发布:linux vncserver 编辑:程序博客网 时间:2024/05/19 20:18
Problem:
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.
Analysis:
The below solutions are recursive. Recursive methods are straightforward.
Of course, we can use non-recursive method to solve them.
1. Below progrem is a typical recursive solution to such problems. The function getPath returns when the recursive pointer reaches a leaf.
2. Notice a boundary case: a tree with only one node, root and its value is equal to the sum.
Solution:
C++:
Recursive solution: (12 ms)
void CalculatePathSums(TreeNode* local_root, int sum, bool& hasPath) { if(local_root->left == NULL && local_root->right == NULL) { if(sum == local_root->val) hasPath = true; return; } else { if(!hasPath && local_root->left != NULL) CalculatePathSums(local_root->left, sum - local_root->val, hasPath); if(!hasPath && local_root->right != NULL) CalculatePathSums(local_root->right, sum - local_root->val, hasPath); } } bool hasPathSum(TreeNode *root, int sum) { bool rv = false; if(root != NULL) CalculatePathSums(root, sum, rv); return rv; }
Non-recursive solution: (12 ms)
bool hasPathSum(TreeNode *root, int sum) { if(root == NULL) return false; bool found = false; stack<TreeNode *> node_stack; TreeNode *p_cur = root; TreeNode *visited = NULL; int sum_backup = sum; while(p_cur || !node_stack.empty()) { if(p_cur) { sum -= p_cur->val; node_stack.push(p_cur); if(p_cur->left == NULL && p_cur->right == NULL && sum == 0) { found = true; break; } p_cur = p_cur->left; } else { p_cur = node_stack.top(); if(p_cur->right == NULL || p_cur->right == visited) { sum += p_cur->val; node_stack.pop(); visited = p_cur; p_cur = NULL; } else p_cur = p_cur->right; } } return found; }
- [Leetcode 112, Easy] Path sum I
- 【LeetCode】(112)Path Sum(Easy)
- Leetcode[Easy] - Path Sum
- LeetCode 112, 123. Path Sum i, ii
- LeetCode 112&113 --Path Sum I & II;
- <LeetCode><Easy> 112 Path Sum --二叉树深度优先遍历
- leetcode 112 Path Sum(难易度:Easy)
- LeetCode:Path Sum I &&II
- 【LeetCode】path-sum i&ii
- Leetcode 112. Path Sum (Easy) (cpp)
- Leetcode 437. Path Sum III (Easy) (cpp)
- LeetCode解题报告 112. Path Sum [easy]
- LeetCode-Easy刷题(26) Path Sum
- <LeetCode OJ> 112/113. Path Sum(I / II)
- Leetcode题 112 和 113. Path Sum I and II
- 【LeetCode】112,113,437. Path Sum I, II, III
- LeetCode(112)Path Sum
- LeetCode 112 Path Sum
- 找实习
- LeetCode题解:Partition List
- LeetCode题解:Binary Tree Preorder Traversal
- 队列的概念及实现
- 德国波恩出差记(二)
- [Leetcode 112, Easy] Path sum I
- [Leetcode 104, Easy] Minimum (Maximum) Depth of Binary Tree
- 解决Socket端口关闭后监听方法出错
- 真机LOG开关
- Java生成随机长度指定密码
- 美观大方的wordpress企业主题 dx-ecbr
- 2-1 ~ 2-2 内置类型和字面值常量
- [Leetcode 66, Easy] Plus One
- 2-3 变量