题目描述
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.
Note: A leaf is a node with no children.
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.
代码
注意递归终止条件,题目要求“根节点到叶子结点”。并非root为空,而是root为叶子结点。
#include <iostream>
using namespace std;
/// Definition for a binary tree node.
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
/// Recursive
/// Time Complexity: O(n), where n is the nodes' number of the tree
/// Space Complexity: O(h), where h is the height of the tree
class Solution {
public:
bool hasPathSum(TreeNode* root, int sum) {
if(!root)
return false;
if(!root->left && !root->right) //递归终止条件并非root等于空
return sum == root->val;
return hasPathSum(root->left, sum - root->val)
|| hasPathSum(root->right, sum - root->val); //或者写成:如果左递归满足,返回ture;如果右递归满足,返回ture;否则返回flase
}
};
int main() {
return 0;
}
思路二
非递归
#include <iostream>
#include <stack>
using namespace std;
/// Definition for a binary tree node.
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
/// Non-Recursive
/// Using Stack
///
/// Time Complexity: O(n), where n is the nodes' number of the tree
/// Space Complexity: O(h), where h is the height of the tree
class Solution {
public:
bool hasPathSum(TreeNode* root, int sum) {
if(!root)
return false;
stack<pair<TreeNode*, int>> stack;
stack.push(make_pair(root, sum));
while(!stack.empty()){
TreeNode* cur = stack.top().first;
int num = stack.top().second;
stack.pop();
if(num == cur->val && !cur->left && !cur->right)
return true;
if (cur->left)
stack.push(make_pair(cur->left, num - cur->val));
if (cur->right)
stack.push(make_pair(cur->right, num - cur->val));
}
return false;
}
};
int main() {
return 0;
}