描述
给定一个二叉树的 根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。文章来源地址https://www.toymoban.com/news/detail-795440.html
思路
- 对树进行深度优先搜索,在搜索过程中,我们总是先访问右子树。那么对于每一层来说,我们在这层见到的第一个结点一定是最右边的结点
- 但凡循环or遍历都会有中间状态产生,如奇偶、遍历的计数、嵌套遍历的话内层循环就会有首位值,这些都将是重要信号,可以暂存利用
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def rightSideView(self, root: Optional[TreeNode]) -> List[int]:
depth_mapping_rightmost_value = dict() # 深度为索引,存放节点的值
max_depth = -1
queue = deque([(root, 0)])
while queue:
node, depth = queue.popleft()
if node is not None:
# 维护二叉树的最大深度
max_depth = max(max_depth, depth)
""" 如果每层存放节点都是从左往右,那么每一层最后一个访问到的节点值是每层最右端节点,因此不断更新对应深度的信息即可"""
depth_mapping_rightmost_value[depth] = node.val
queue.append((node.left, depth + 1))
queue.append((node.right, depth + 1))
return [depth_mapping_rightmost_value[depth] for depth in range(max_depth + 1)]
文章来源:https://www.toymoban.com/news/detail-795440.html
到了这里,关于199_二叉树的右视图的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!