天天看點

LeetCode 404. 左葉子之和

  • 題目:

    計算給定二叉樹的所有左葉子之和。

示例:

3
           

/

9 20

/

15 7

在這個二叉樹中,有兩個左葉子,分别是 9 和 15,是以傳回 24

  • 解題思路

    遞歸法:

    遞歸出口:節點為空,傳回;左孩子,将其值壓入結果向量

    一般:将根的左子樹中的所有左孩子壓入結果向量,将根的右子樹中的所有左孩子壓入結果向量

代碼實作

vector<int> sum(TreeNode* root)
    {
        vector<int> res;
        if(!root)
            return res;
        if(root->left && !root->left->left && !root->left->right)
            res.push_back(root->left->val);
        vector<int>res1 = sum(root->left);
        for(int i = 0; i < res1.size(); i++)
            res.push_back(res1[i]);
        vector<int>res2 = sum(root->right);
        for(int i = 0; i < res2.size(); i++)
            res.push_back(res2[i]);
        return res;
    }
   
    int sumOfLeftLeaves(TreeNode* root) {
       vector<int> res= sum(root);
       int sum = 0;
        for(int i = 0; i < res.size(); i++)
        sum += res[i];
        return sum;
    }
           

實作二

int sum = 0;
    int sumOfLeftLeaves(TreeNode* root) {
         if(!root)
             return sum;
         if(root->left && !root->left->left && !root->left->right)
                sum += root->left->val;
          sumOfLeftLeaves(root->left);
          sumOfLeftLeaves(root->right);
        return sum;
    }