面试题25:二叉树中和为某一值的路径

来源:互联网 发布:淘宝网李宁 编辑:程序博客网 时间:2024/05/16 06:19

        题目:输入一棵二叉树和一个整数。打印出二叉树中节点值的和为输入整数的所有路径。从树的根节点开始往下一直到叶节点成为一条路径。

        这题开始用堆栈来做,我也不知道自己写的什么鬼。后来还是用递归来做,代码如下:

         

struct TreeNode {int val;struct TreeNode *left;struct TreeNode *right;TreeNode(int x) :val(x), left(NULL), right(NULL) {}};class Solution {public:    vector<vector<int> > FindPath(TreeNode* root,int expectNumber) {        vector<int> numVect;        vector<vector<int> > vectSet;        if(root==NULL)            return vectSet;        FindPath(root,expectNumber,numVect,vectSet);              return vectSet;    }    void FindPath(TreeNode* root,int expectNumber,vector<int> &numVect,vector<vector<int> > &vectSet)    {        TreeNode *curNode=root;        if(curNode->left==NULL&&curNode->right==NULL)        {                if(curNode->val==expectNumber)                {                    numVect.push_back(curNode->val);                    vectSet.push_back(numVect);                    numVect.pop_back();                    return;                }            }        else        {                numVect.push_back(curNode->val);                if(curNode->left)                    FindPath(root->left,expectNumber-curNode->val,numVect,vectSet);                               if(curNode->right)                    FindPath(root->right,expectNumber-curNode->val,numVect,vectSet);                numVect.pop_back();        }            }};
        同时将原来用stack写的代码记录下,注意,该代码是错误的,但是我不会修改,先记录下,哪位大神路过教修改下。

       

class Solution {public:    vector<vector<int> > FindPath(TreeNode* root,int expectNumber) {        vector<int> numVect;        vector<vector<int> > vectSet;        if(root==NULL)            return vectSet;        TreeNode *curNode=root;        stack<TreeNode *> nodeStack;        nodeStack.push(curNode);        while(!nodeStack.empty())        {            curNode=nodeStack.top();            nodeStack.pop();            if(curNode->left==NULL&&curNode->right==NULL)            {                if(curNode->val==expectNumber)                {                    numVect.push_back(curNode->val);                    vectSet.push_back(numVect);                    numVect.pop_back();                }               }            else            {                numVect.push_back(curNode->val);                expectNumber-=curNode->val;                                 if(curNode->right)                    nodeStack.push(curNode->right);                if(curNode->left)                    nodeStack.push(curNode->left);             //   expectNumber+=curNode->val;             //   numVect.pop_back();            }        }        return vectSet;              }};

        

0 0
原创粉丝点击