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
二叉树的深度遍历的问题,下面提供了 非递归和递归两种算法
递归:
class Solution {
public:
bool hasPathSum(TreeNode* root, int sum) {
if(root==NULL)
{
return false;
}
int temp=sum-root->val;
bool flag1,flag2;
flag1=false;
flag2=false;
if(root->left!=NULL)
{
flag1=hasPathSum(root->left,temp);
}
if(root->right!=NULL)
{
flag2=hasPathSum(root->right,temp);
}
if(root->right==NULL && root->left==NULL&& temp==0)
{
return true;
}
return flag1 || flag2;
}
};
非递归:
在非递归的实现里面,类似图的dfs ,我加入了一个类似visit数组功能的map,来显示是否已被vis
class Solution {
public:
bool hasPathSum(TreeNode* root, int sum) {
if(root==NULL)
{
return false;
}
TreeNode *p=root;
int cursum=root->val;
stack<TreeNode *> re;
re.push(p);
map<TreeNode *, int> mapre;
mapre[p]=1;
while(!re.empty())
{
p=re.top();
while(p->left!=NULL && mapre.find(p->left)==mapre.end())
{
re.push(p->left);
cursum+=p->left->val;
mapre[p->left]=1;
p=p->left;
}
if(p->right!=NULL && mapre.find(p->right)==mapre.end())
{
re.push(p->right);
cursum+=p->right->val;
mapre[p->right]=1;
}
else
{
re.pop();
if(cursum==sum && p->right==NULL && p->left==NULL)
{
return true;
}
cursum-=p->val;
}
}
return false;
}
};