题解 | #二叉树中和为某一值的路径(二)#

二叉树中和为某一值的路径(二)

https://www.nowcoder.com/practice/b736e784e3e34731af99065031301bca

第一版代码,用了栈,然后把栈拷贝后逆序复制到数组中。其实可以不用栈的,省了栈和拷贝栈的空间。能直接把数组当栈使。
    stack<TreeNode*> s;

    void func(TreeNode* root, int sum, vector<vector<int> >& results) {
        if (root == NULL)return;
        s.push(root);
        //如果遇到了符合条件的叶子节点。
        if (root->val == sum && root->left == NULL && root->right == NULL) {
            vector<int>result(s.size());
            stack<TreeNode*> temp(s);
            //将栈拷贝一份,然后逆序复制到数组中
            for (int i = s.size() - 1; i >= 0; i--) {
                result[i] = temp.top()->val;
                temp.pop();
            }
            //将数组添加到总的结果中
            results.push_back(result);
            s.pop();
            return;
        }
        func(root->left, sum - root->val, results);
        func(root->right, sum - root->val, results);
        s.pop();
        return;
    }

    vector<vector<int> > FindPath(TreeNode* root, int expectNumber) {
        vector<vector<int> > result;
        if (root == NULL)
            return result;
        vector<vector<int> >results;
        func(root, expectNumber, results);
        return results;
    }
第二版代码,参考了排行榜一的办法,将栈直接改成了用数组。内存使用一下低了很多。
    //stack<TreeNode*> s;
    vector<int>s;

    void func(TreeNode* root, int sum, vector<vector<int> >& results) {
        if (root == NULL)return;
        s.push_back(root->val);
        //如果遇到了符合条件的叶子节点。
        if (root->val == sum && root->left == NULL && root->right == NULL) {
            //stack<TreeNode*> temp(s);
            //将栈拷贝一份,然后逆序复制到数组中
           /* for (int i = s.size() - 1; i >= 0; i--) {
                result[i] = temp.top()->val;
                temp.pop();
            }*/
            //将数组添加到总的结果中
            results.push_back(s);
            s.pop_back();
            return;
        }
        func(root->left, sum - root->val, results);
        func(root->right, sum - root->val, results);
        s.pop_back();
        return;
    }

    vector<vector<int> > FindPath(TreeNode* root, int expectNumber) {
        vector<vector<int> > result;
        if (root == NULL)
            return result;
        vector<vector<int> >results;
        func(root, expectNumber, results);
        return results;
    }



全部评论

相关推荐

过往烟沉:我说什么来着,java就业面就是广!
点赞 评论 收藏
分享
1 收藏 评论
分享
牛客网
牛客企业服务