Welcome to Subscribe On Youtube

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);
    }
};
  • /**
     * 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;
        }
    }
    
    ############
    
    /**
     * 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) {
                return 0;
            }
            int res = 0;
            if (root.left != null && root.left.left == null && root.left.right == null) {
                res += root.left.val;
            }
            res += sumOfLeftLeaves(root.left);
            res += sumOfLeftLeaves(root.right);
            return res;
        }
    }
    
  • // 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:
    #     def __init__(self, x):
    #         self.val = x
    #         self.left = None
    #         self.right = None
    
    
    class Solution:
        def sumOfLeftLeaves(self, root: TreeNode) -> int:
            if root is None:
                return 0
            res = 0
            if root.left and root.left.left is None and root.left.right is None:
                res += root.left.val
            res += self.sumOfLeftLeaves(root.left)
            res += self.sumOfLeftLeaves(root.right)
            return res
    
    ############
    
    # 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
    
    
  • /**
     * Definition for a binary tree node.
     * type TreeNode struct {
     *     Val int
     *     Left *TreeNode
     *     Right *TreeNode
     * }
     */
    func sumOfLeftLeaves(root *TreeNode) int {
    	if root == nil {
    		return 0
    	}
    	res := 0
    	if root.Left != nil && root.Left.Left == nil && root.Left.Right == nil {
    		res += root.Left.Val
    	}
    	res += sumOfLeftLeaves(root.Left)
    	res += sumOfLeftLeaves(root.Right)
    	return res
    }
    
  • /**
     * Definition for a binary tree node.
     * class TreeNode {
     *     val: number
     *     left: TreeNode | null
     *     right: TreeNode | null
     *     constructor(val?: number, left?: TreeNode | null, right?: TreeNode | null) {
     *         this.val = (val===undefined ? 0 : val)
     *         this.left = (left===undefined ? null : left)
     *         this.right = (right===undefined ? null : right)
     *     }
     * }
     */
    
    const dfs = (root: TreeNode | null, isLeft: boolean) => {
        if (!root) {
            return 0;
        }
        const { val, left, right } = root;
        if (!left && !right) {
            if (isLeft) {
                return val;
            }
            return 0;
        }
        return dfs(left, true) + dfs(right, false);
    };
    
    function sumOfLeftLeaves(root: TreeNode | null): number {
        return dfs(root, false);
    }
    
    
  • // Definition for a binary tree node.
    // #[derive(Debug, PartialEq, Eq)]
    // pub struct TreeNode {
    //   pub val: i32,
    //   pub left: Option<Rc<RefCell<TreeNode>>>,
    //   pub right: Option<Rc<RefCell<TreeNode>>>,
    // }
    //
    // impl TreeNode {
    //   #[inline]
    //   pub fn new(val: i32) -> Self {
    //     TreeNode {
    //       val,
    //       left: None,
    //       right: None
    //     }
    //   }
    // }
    use std::rc::Rc;
    use std::cell::RefCell;
    impl Solution {
        fn dfs(root: &Option<Rc<RefCell<TreeNode>>>, is_left: bool) -> i32 {
            if root.is_none() {
                return 0;
            }
            let node = root.as_ref().unwrap().borrow();
            let left = &node.left;
            let right = &node.right;
            if left.is_none() && right.is_none() {
                if is_left {
                    return node.val;
                }
                return 0;
            }
            Self::dfs(left, true) + Self::dfs(right, false)
        }
    
        pub fn sum_of_left_leaves(root: Option<Rc<RefCell<TreeNode>>>) -> i32 {
            Self::dfs(&root, false)
        }
    }
    
    

All Problems

All Solutions