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