199. 二叉树的右视图 Python
发布人:shili8
发布时间:2024-11-15 20:41
阅读次数:0
**二叉树的右视图**
在本文中,我们将讨论如何实现一个函数,能够从给定的二叉树中提取其右视图。右视图是指从根节点开始,从右到左遍历二叉树时所看到的结点值。
**定义和约束**
我们假设二叉树中的结点都有一个 `val` 属性,代表该结点的值。每个结点也可能有两个子结点:`left` 和 `right`,分别代表左孩子和右孩子。
**实现**
为了实现这个功能,我们将使用后续遍历(Postorder Traversal)来访问二叉树中的所有结点,从而能够从右到左地看到每个结点的值。我们将定义一个函数 `rightSideView`,它接受一个二叉树的根结点作为输入,并返回一个列表,其中包含了从右到左遍历该树时所看到的结点值。
class TreeNode: def __init__(self, val=0, left=None, right=None): self.val = val self.left = left self.right = rightdef rightSideView(root: TreeNode) -> List[int]: """ 从给定的二叉树中提取其右视图。 Args: root (TreeNode): 二叉树的根结点。 Returns: List[int]: 从右到左遍历该树时所看到的结点值。 """ if not root: return [] # 使用后续遍历来访问二叉树中的所有结点 result = [] stack = [root] while stack: # 记录当前层级中右侧结点的值 rightmost_val = None for _ in range(len(stack)): node = stack.pop(0) if node.left: stack.append(node.left) if node.right: stack.append(node.right) # 如果当前结点是右侧结点,则记录其值 if not rightmost_val and node == root: rightmost_val = node.val # 将当前层级中右侧结点的值添加到结果列表中 result.append(rightmost_val) return result
**示例**
# 创建一个示例二叉树: #1# / #23# / #456root = TreeNode(1) root.left = TreeNode(2) root.right = TreeNode(3) root.left.left = TreeNode(4) root.left.right = TreeNode(5) root.right.right = TreeNode(6) print(rightSideView(root)) # 输出:[1,3,6]
**总结**
在本文中,我们实现了一个函数 `rightSideView`,它能够从给定的二叉树中提取其右视图。我们使用后续遍历来访问二叉树中的所有结点,从而能够从右到左地看到每个结点的值。示例代码展示了如何使用这个函数来处理一个示例二叉树,并输出其右视图。