1. 程式人生 > >Leetcode---113. 路徑總和 II

Leetcode---113. 路徑總和 II

給定一個二叉樹和一個目標和,找到所有從根節點到葉子節點路徑總和等於給定目標和的路徑。

說明: 葉子節點是指沒有子節點的節點。

示例:
給定如下二叉樹,以及目標和 sum = 22

              5
             / \
            4   8
           /   / \
          11  13  4
         /  \    / \
        7    2  5   1

返回:

[
   [5,4,11,2],
   [5,8,4,5]
]

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------

這道題,學到了,真的是學到了,直接把路徑總和lll 也AC了,hahaha.

一開始,想不通這個路徑該怎麼儲存,可以由一個 vector<int> t 和一個 vector<vector<int>> s 來實現路徑的儲存。

思路遞迴到葉子節點,並判斷這是是否和之前的和為sum,如果等於,直接s.push_back(t); 實現這條路的儲存。

再將最後進入的彈出:t.pop_back()    最後路徑的條數為s.size(),並且路徑都在容器s中。 

AC:

class Solution {
public:
       vector<vector<int>> s;
       vector<int> t;
         void fun(TreeNode* root,int sum)   //這裡的函式不需要返回,因為結果都在s中,s是全域性變數。


         {
             if (root==NULL)
                 return ;
             t.push_back(root->val);
             if (root->val==sum&&root->left==NULL&&root->right==NULL)      
               {
                 s.push_back(t);
             }
             fun(root->left,sum-root->val);
             fun(root->right,sum-root->val);
             t.pop_back();      //將最近push()進的葉子節點彈出,實現換路。

         }

    vector<vector<int>> pathSum(TreeNode* root, int sum) {
               fun(root,sum);
               return s;
    }
};

這道題真挺好的,學到了很多,666666666送給我自己,hahahhaaha(來自菜鳥的欣喜).

容器真是個好東西,得好好看看。