二叉树的深度遍历的问题,下面提供了 非递归和递归两种算法
递归:
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; } };