Type: Medium, BFS
问题描述:
Given a binary tree, imagine yourself standing on the right side of it, return the values of the nodes you can see ordered from top to bottom.
Example:
Input: [1,2,3,null,5,null,4]
Output: [1, 3, 4]
Explanation:
1 <---
/ \
2 3 <---
\ \
5 4 <---
# 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 rightSideView(self, root):
"""
:type root: TreeNode
:rtype: List[int]
"""
que = [[root, 0]]
record = {}
layer = 0
while que != []:
[cur, layer] = que.pop(0)
if cur:
if layer not in record:
record[layer] = [cur.val]
else:
record[layer] += [cur.val]
que += [[cur.left,layer + 1], [cur.right, layer + 1]]
# while que != []:
# [cur, layer] = que.pop(0)
# if cur != None:
# if layer not in record:
# record[layer] = [cur.val]
# else:
# record[layer] += [cur.val]
# que += [[root.left, layer + 1], [root.right, layer + 1]] # 这里写成了root.left,应当是cur
# 将字典中数据提取到数组
res = [None] * len(record)
for key, val in record.items():
res[key] = val[-1]
return res
仍然是标准的BFS的写法,用record字典来记录层序,然后用数组拿出最右边的数据。
这个写法有点浪费空间其实,可以改进,在遍历时拿出直接得到结果,现在先练习这个定式。