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.
思路:后续遍历即可,只要访问到叶子节点,就把栈里的全部求和并与sum作比较,这里不能用stack,
因为stack不能访问栈中所有节点的值,所以用vector实现栈。
class Solution {
public:
bool hasPathSum(TreeNode* root, int sum) {
if(NULL == root)
return false;
vector<TreeNode *> vint;
TreeNode *last,*tmp;
vint.push_back(root);
tmp = root->left;
last = NULL;
int sumOfNodes = 0;
vector<TreeNode*>::iterator iter;
while(!vint.empty())
{
while(tmp != NULL)
{
vint.push_back(tmp);
tmp = tmp->left;
}
tmp = vint.back();
if(tmp->right == NULL)
{
if(tmp->left == NULL)
{
sumOfNodes = 0;
for(iter = vint.begin();iter != vint.end();++iter)
{
sumOfNodes = sumOfNodes + (*iter)->val;
cout << sumOfNodes << endl;
}
if(sum == sumOfNodes)
return true;
}
last = vint.back();
vint.pop_back();
}
else if(tmp->right != NULL && tmp->right == last)
{
last = vint.back();
vint.pop_back();
}
if(!vint.empty() && vint.back()->right != NULL && vint.back()->right != last)
tmp = vint.back()->right;
else
tmp = NULL;
}
return false;
}
};