# Time:  O(n)
# Space: O(h)

# Given a binary tree, find the leftmost value in the last row of the tree.
#
# Example 1:
# Input:
#
#     2
#   / \
#   1   3
#
# Output:
# 1
# Example 2:
# Input:
#
#         1
#       / \
#       2   3
#      /   / \
#     4   5   6
#       /
#       7
#
# Output:
# 7
# Note: You may assume the tree (i.e., the given root node) is not NULL.

# 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 findBottomLeftValue(self, root):
        """
        :type root: TreeNode
        :rtype: int
        """
        def findBottomLeftValueHelper(root, curr_depth, max_depth, bottom_left_value):
            if not root:
                return max_depth, bottom_left_value
            if not root.left and not root.right and curr_depth+1 > max_depth:
                return curr_depth+1, root.val
            max_depth, bottom_left_value = findBottomLeftValueHelper(root.left, curr_depth+1, max_depth, bottom_left_value)
            max_depth, bottom_left_value = findBottomLeftValueHelper(root.right, curr_depth+1, max_depth, bottom_left_value)
            return max_depth, bottom_left_value

        result, max_depth = 0, 0
        return findBottomLeftValueHelper(root, 0, max_depth, result)[1]


# Time:  O(n)
# Space: O(n)
class Solution2(object):
    def findBottomLeftValue(self, root):
        """
        :type root: TreeNode
        :rtype: int
        """
        queue = [root]
        for node in queue:
            queue += filter(None, (node.right, node.left))
        return node.val

@@ -1549,16 +1549,27 @@
     
+ last_node,
  queue =
  %5Bro
@@ -1564,16 +1564,22 @@
  queue =
+ None,
  %5Broot%5D%0A
@@ -1590,26 +1590,57 @@
     
-for 
+while queue:%0A            last_
 node 
-in
+=
  queue
-:
+.pop(0)
 %0A   
@@ -1657,26 +1657,34 @@
 ueue
- += filter(None, (
+.extend(%5Bn for n in %5Blast_
 node
@@ -1691,16 +1691,21 @@
 .right, 
+last_
 node.lef
@@ -1705,17 +1705,23 @@
 ode.left
-)
+%5D if n%5D
 )%0A      
@@ -1733,13 +1733,18 @@
 urn 
+last_
 node.val
 %0A
@@ -1738,13 +1738,15 @@
 ast_node.val
+ue
 %0A

Make find-bottom-left-value less terse