题目:
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.
分析:
使用dfs遍历该树,然后分析在叶结点的值即可。
代码:
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
bool hasPathSum(TreeNode* root, int sum) {
if(root==NULL)return false;
stack<TreeNode*> tree;
stack<int> sums;
tree.push(root);
sums.push(root->val);
while(!tree.empty()){
TreeNode* tmp=tree.top();
tree.pop();
int sumNow=sums.top();
sums.pop();
if(tmp->right){
tree.push(tmp->right);
sums.push(sumNow+(tmp->right)->val);
}
if(tmp->left){
tree.push(tmp->left);
sums.push(sumNow+(tmp->left)->val);
}
if(!(tmp->left)&&!(tmp->right)&&sumNow==sum)return true;
}
return false;
}
};