Problem

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.

思路一(bfs)

  • if root node is the only one node, it doesn't count as left leave node
  • Given the current node, determine if cur.left != null,
    • if yes, if cur.left.left == null && cur.left.right == null, add to sum
    • else if no, add to queue
  • if cur.right != null, add to queue
    public int sumOfLeftLeaves(TreeNode root) {
        int sum = 0;
        if (root == null) return sum;
        Queue<TreeNode> queue = new LinkedList<>();
        queue.offer(root);
        while (!queue.isEmpty()) {
            TreeNode curt = queue.poll();
            if (curt.left != null && curt.left.left == null && curt.left.right == null) {
                sum += curt.left.val;
            } else if (curt.left != null) {
                queue.offer(curt.left);
            }
            if (curt.right != null) {
                queue.offer(curt.right);
            }
        }
        return sum;
    }
}

思路二(divide and conquer)

  • if root node is the only one node, it doesn't count as left leave node
  • Given the current node, determine if cur.left != null,
    • if yes, if cur.left.left == null && cur.left.right == null, add to sum
    • else if no, recursively find it
  • if cur.right != null, recursively find it
    public int sumOfLeftLeaves(TreeNode root) {
        if (root == null) return 0;

        int sum = 0;

        if (root.left != null) {
            if (root.left.left == null && root.left.right == null) {
                sum += root.left.val;        
            } else {
                sum += sumOfLeftLeaves(root.left);
            }
        }
        if (root.right != null) {
            sum += sumOfLeftLeaves(root.right);
        }
        return sum;
    }

results matching ""

    No results matching ""