题目

给定二叉树的根节点 root ,返回所有左叶子之和。

示例 1:
image.png

  1. 输入: root = [3,9,20,null,null,15,7]
  2. 输出: 24
  3. 解释: 在这个二叉树中,有两个左叶子,分别是 9 15,所以返回 24

示例 2:

输入: root = [1]
输出: 0

提示:

  • 节点数在 [1, 1000] 范围内
  • -1000 <= Node.val <= 1000

    解题方法

    递归 DFS

    通过父节点从而判断左叶子(左节点不为空且无左右孩子)
    时间复杂度O(n),空间复杂度O(n)
    C++代码:

    /**
    * Definition for a binary tree node.
    * struct TreeNode {
    *     int val;
    *     TreeNode *left;
    *     TreeNode *right;
    *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
    *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
    *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
    * };
    */
    class Solution {
    public:
      int sumOfLeftLeaves(TreeNode* root) {
          if(!root)    return 0;
          int val = 0;
          if(root->left && !root->left->left && !root->left->right)  val = root->left->val;
    
          return val + sumOfLeftLeaves(root->left) + sumOfLeftLeaves(root->right);
      }
    };
    

    迭代 BFS

    通过迭代 BFS 遍历二叉树节点,记录左叶子值之和。
    时间复杂度O(n),空间复杂度O(n)
    C++代码:

    /**
    * Definition for a binary tree node.
    * struct TreeNode {
    *     int val;
    *     TreeNode *left;
    *     TreeNode *right;
    *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
    *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
    *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
    * };
    */
    class Solution {
    public:
      int sumOfLeftLeaves(TreeNode* root) {
          queue<TreeNode*> nodes;
          int val = 0;
          if(!root)   return val;
          nodes.push(root);
          while(nodes.size()>0) {
              TreeNode *cur = nodes.front();
              nodes.pop();
              if(cur->left) {
                  if(!cur->left->left && !cur->left->right)  val += cur->left->val;
                  else nodes.push(cur->left);
              }
              if(cur->right) nodes.push(cur->right);
          }
    
          return val;
      }
    };