📜  打印二叉树的右视图(1)

📅  最后修改于: 2023-12-03 15:39:40.999000             🧑  作者: Mango

打印二叉树的右视图

简介

题目描述:给定一棵二叉树,返回它的右视图。

右视图定义为二叉树的每一层中最右边的节点。

示例输入:

     1
   /  \
  2    3
   \    \
    5    4

示例输出:

[1, 3, 4]
思路

这道题目需要我们返回二叉树每一层的最右一个节点值。我们可以使用广度优先搜索,每层遍历时取出最后一个节点。记忆当前队列大小,遍历一层时,将该层最后一个节点添加到结果中即可。

代码实现
class TreeNode:
    def __init__(self, x):
        self.val = x
        self.left = None
        self.right = None

class Solution:
    def rightSideView(self, root: TreeNode) -> List[int]:
        if not root:
            return []

        res = []
        queue = [root]

        while queue:
            size = len(queue)
            for i in range(size):
                node = queue.pop(0)
                if i == size - 1:
                    res.append(node.val)

                if node.left:
                    queue.append(node.left)
                if node.right:
                    queue.append(node.right)

        return res
复杂度分析

时间复杂度:$O(N)$。其中,N 是二叉树中的节点个数,每个节点都会被遍历一次。

空间复杂度:$O(N)$。使用了队列存储节点。在最差情况下,队列的大小会达到 $\frac{N}{2}$,即最底层的节点数。