Leetcode Path Sum II

來源:互聯網
上載者:User

標籤:des   style   blog   http   color   使用   

Given a binary tree and a sum, find all root-to-leaf paths where each path‘s sum equals the given sum.

For example:
Given the below binary tree and  sum = 22,
              5             /             4   8           /   /           11  13  4         /  \    /         7    2  5   1

return

[   [5,4,11,2],   [5,8,4,5]]
遞迴實現,注意遞迴實現時,放入vector中的資料,之後要pop_back出,此題中path參數沒有使用引用,是按值傳遞的
class Solution {public:    vector<vector<int> > res;        void solvePathSum(TreeNode *root, int sum, vector<int> path){        if(root == NULL) return;        if(root->left == NULL && root->right == NULL){            if(sum == root->val){                path.push_back(root->val);                res.push_back(path);            }            return;        }        path.push_back(root->val);        solvePathSum(root->left,sum-root->val,path);        solvePathSum(root->right,sum-root->val,path);    }    vector<vector<int> > pathSum(TreeNode *root, int sum) {        vector<int> path;        solvePathSum(root,sum,path);        return res;    }};
遞迴實現

 非遞迴實現,在節點中添加了一個指向父節點的指標

class Solution {public:    struct TreeNodeSum{        TreeNode *node;        TreeNodeSum *parent;        int sum;        TreeNodeSum(TreeNode* node_, int sum_, TreeNodeSum* parent_ = NULL ):node(node_),sum(sum_),parent(parent_){}    };        vector<vector<int> > pathSum(TreeNode *root, int sum) {        vector<vector<int> >res;        if(root == NULL) return res;        queue<TreeNodeSum *> que;        que.push(new TreeNodeSum(root,root->val));        while(!que.empty()){            TreeNodeSum *tmp = que.front();que.pop();            TreeNode *node = tmp->node;            if(!node->left && !node->right && tmp->sum == sum){                vector<int> path;                while(tmp){                    path.push_back(tmp->node->val);                    tmp = tmp->parent;                }                reverse(path.begin(),path.end());                res.push_back(path);                continue;            }            if(node->left){                TreeNodeSum *nodeSum = new TreeNodeSum(node->left,node->left->val+tmp->sum,tmp);                que.push(nodeSum);            }            if(node->right ){                TreeNodeSum *nodeSum = new TreeNodeSum(node->right,node->right->val+tmp->sum,tmp);                que.push(nodeSum);            }        }        return res;    }}; 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.