Leetcode 199. 二叉樹的右視圖

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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章