BT path sum
抱歉代码未通过所有case,算法有误,博主还没探索出非递归的算法,递归的算法在博主csdn同一天的博客里有,之前看July收集100题也有一篇博客。
/*/
题目比较通俗易懂,找一条从根到叶子的路径,使得元素和为给定值,如果是递归的话,可能没法弄,所以必须非递归的,先序遍历是一个好的方法,但是改成path+=这种的,还是有些需要注意的,
里面while循环是向左探,那么每次p都非空,因此path+=p->data 写在这里,那么pop时候要当心,因为p=S.pop() 有可能是p->left 时空,例如刚才左探到底了,那么而且pop出来相当于退到刚才父亲,所以path-=p->left->data,
vector<vector<int> > pathSum(TreeNode *root, int sum) {
TreeNode* p=root;
Stack<TreeNode* > S;
int path=0;
vector<<vector<int> > allpathvec;
while(!S.empty()||p!=NULL)
{
while(p!=NULL)
{
S.push(p);
path+=p->data;
p=p->left;
}
if(path==sum)
{
vector<int> pathvec;
for(Stack<TreeNode*>::iterator it=S.begin();it!=S.end();it++)
pathvec.push_back(it->first->data);
allpathvec.push_back(pathvec);
}
p=S.pop();
if(p->left!=NULL)
path-=p->left->data;
p=p->right;
}
return false;
}