Leetcode 199. 二叉树的右视图
难度:中等
用法:BFS
给定一棵二叉树,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。
示例:
输入: [1,2,3,null,5,null,4]
输出: [1, 3, 4]
解释:1 <--- / \ 2 3 <--- \ \ 5 4 <---
思路:
观察发现右视图由每层的最右元素组成。
- 维护一个当前层队列cur_lever_que
- 消费当前队列,得到下层的节点放入下一层队列nex_lever_que
- 消费完当前队列之时,需把nex_lever_que队列赋给当前队列cur_lever_que,同时需要将nex_lever_que队列置空
- 直到nex_lever_que队列没有要消费的节点为止
算法:
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
from collections import deque
class Solution:
def rightSideView(self, root: TreeNode) -> List[int]:
# 特判
if not root: return []
# 存结果
res = []
# 存放当前位置的下一层节点的队列
nex_lever_que = deque()
nex_lever_que.append(root)
# 结束条件为下层队列无消费节点
while nex_lever_que:
# 将下一层队列最后的节点值追加到结果中
res.append(nex_lever_que[-1].val)
# 下一层队列节点置给当前队列进行消费
cur_lever_que = nex_lever_que
# 同时,将下一层队列置空,以存当前层所有节点的下一层节点
nex_lever_que = deque()
# 消费完当前层队列
while cur_lever_que:
p = cur_lever_que.popleft()
if p.left:
nex_lever_que.append(p.left)
if p.right:
nex_lever_que.append(p.right)
return res