📅  最后修改于: 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}$,即最底层的节点数。