[劍指 Offer]二叉樹中和爲某一值的路徑

[劍指 Offer]二叉樹中和爲某一值的路徑

劍指 Offer-二叉樹中和爲某一值的路徑

題目描述

輸入一棵二叉樹和一個整數,打印出二叉樹中節點值的和爲輸入整數的所有路徑。從樹的根節點開始往下一直到葉節點所經過的節點形成一條路徑。

示例:

給定如下二叉樹,以及目標和 sum = 22,
              5
             / \
            4   8
           /   / \
          11  13  4
         /  \    / \
        7    2  5   1
返回:
[
   [5,4,11,2],
   [5,8,4,5]
]

提示:
節點總數 <= 10000

解題思路
  • 假設根節點值爲root,從根節點開始找和爲sum的路徑,可以理解爲,從根的左子樹開始找和爲sum-root的路徑,以及從根的右子樹開始找和爲sum-root的路徑。
  • 嗯,又是遞歸。
實現代碼
class Solution {
public:
    vector<vector<int>> pathSum(TreeNode* root, int sum) {
        vector<vector<int>> res;
        vector<int> list;
        nextpathSum(root,sum,res,list);
        return res;
    }
    void nextpathSum(TreeNode* root,int sum,vector<vector<int>>& res,vector<int>& list){
        if(root==NULL)
            return;
        
        list.push_back(root->val);

        if(root->val==sum&&root->left==NULL&&root->right==NULL)//符合條件的路徑
            res.push_back(list);
            
        vector<int> rlist=list; //因爲參數是傳地址,所以左子樹找完後找右子樹的時候,list裏是有值的 
                             
        nextpathSum(root->left,sum-root->val,res,list);//左子樹開始找和爲sum-root->val的路徑
        nextpathSum(root->right,sum-root->val,res,rlist);//右子樹開始找和爲sum-root->val的路徑     
            
                   
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章