Formatted question description: https://leetcode.ca/all/404.html

404. Sum of Left Leaves (Easy)

Find the sum of all left leaves in a given binary tree.

Example:

    3
   / \
  9  20
    /  \
   15   7

There are two left leaves in the binary tree, with values 9 and 15 respectively. Return 24.

Related Topics:
Tree

Solution 1. DFS

// OJ: https://leetcode.com/problems/sum-of-left-leaves
// Time: O(N)
// Space: O(H)
class Solution {
private:
    int dfs(TreeNode *root, bool isLeftChild) {
        if (!root) return 0;
        if (!root->left && !root->right && isLeftChild) return root->val;
        return dfs(root->left, true) + dfs(root->right, false);
    }
public:
    int sumOfLeftLeaves(TreeNode* root) {
        return dfs(root, false);
    }
};

Java

  • /**
     * Definition for a binary tree node.
     * public class TreeNode {
     *     int val;
     *     TreeNode left;
     *     TreeNode right;
     *     TreeNode(int x) { val = x; }
     * }
     */
    class Solution {
        public int sumOfLeftLeaves(TreeNode root) {
            if (root == null || root.left == null && root.right == null)
                return 0;
            int sum = 0;
            Queue<TreeNode> queue = new LinkedList<TreeNode>();
            queue.offer(root);
            while (!queue.isEmpty()) {
                TreeNode node = queue.poll();
                TreeNode left = node.left, right = node.right;
                if (isLeaf(left))
                    sum += left.val;
                if (left != null)
                    queue.offer(left);
                if (right != null)
                    queue.offer(right);
            }
            return sum;
        }
    
        public boolean isLeaf(TreeNode node) {
            if (node == null)
                return false;
            if (node.left == null && node.right == null)
                return true;
            return false;
        }
    }
    
  • // OJ: https://leetcode.com/problems/sum-of-left-leaves
    // Time: O(N)
    // Space: O(H)
    class Solution {
    public:
        int sumOfLeftLeaves(TreeNode* root, bool isLeft = false) {
            if (!root) return 0;
            if (!root->left && !root->right) return isLeft ? root->val : 0;
            return sumOfLeftLeaves(root->left, true) + sumOfLeftLeaves(root->right);
        }
    };
    
  • # Definition for a binary tree node.
    # class TreeNode(object):
    #     def __init__(self, x):
    #         self.val = x
    #         self.left = None
    #         self.right = None
    
    class Solution(object):
      def sumOfLeftLeaves(self, root):
        """
        :type root: TreeNode
        :rtype: int
        """
    
        def helper(root, isLeft):
          if not root:
            return None
          left = helper(root.left, True)
          right = helper(root.right, False)
          ret = 0
          if left is None and right is None and isLeft:
            return root.val
          if left:
            ret += left
          if right:
            ret += right
          return ret
    
        ret = helper(root, False)
        if ret:
          return ret
        return 0
    
    

All Problems

All Solutions