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