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;
    }

Posted by richard爱闹 - 7月 24 2014
如需转载,请注明: 本文来自 Richard