代码改变世界

[LeetCode] 513. Find Bottom Left Tree Value_ Medium tag: BFS

2018-07-06 01:00  Johnson_强生仔仔  阅读(244)  评论(0编辑  收藏  举报

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.

 

这个题的思路其实跟[LeetCode] 199. Binary Tree Right Side View_ Medium tag: BFS, Amazon里面我提到的left side view一样的思路, 只是返回的时候返回最后一个元素即可.

1. Constraints

1) root cannot be None, 所以edge case就是 1

 

2, Ideas

BFS:       T: O(n),   S: O(n)    n is the number of the nodes of the tree

 

3. Code

 1 class Solution:
 2     def LeftViewMost(self, root):
 3         ans, queue = [], collections.deque([(root, 0)])
 4         while queue:
 5             node, heig = queue.popleft()
 6             if heig == len(ans):
 7                 ans.append(node.val)
 8             if node.left:
 9                 queue.append(node.left)
10             if node.right:
11                 queue.append(node.right)
12         return ans[-1]

 

2)

class Solution(object):
    def findBottomLeftValue(self, root):
        """
        :type root: TreeNode
        :rtype: int
        """
        ans, queue = (root.val, 0), collections.deque([(root, 0)])
        while queue:
            node, height = queue.popleft()
            if height > ans[1]:
                ans = (node.val, height)
            if node.left:
                queue.append((node.left, height + 1))
            if node.right:
                queue.append((node.right, height + 1))
        return ans[0]

 

4. Test case

1) root is 1

2) 

    2
   / \
  1   3

3)
        1
       / \
      2   3
     /   / \
    4   5   6
       /
      7