.4[选做]求二叉树的右视图。 题目描述:给定一个二叉树的根节点root,想象自己站在它的右侧,按照从顶部至部的顺序,返回从右侧所能看到的节点值。
时间: 2024-11-25 17:20:53 浏览: 15
求解二叉树的右视图问题,实质上是在从右向左遍历二叉树的同时,记录每一层的最左侧节点。由于是从右侧看,所以我们需要逆向地处理节点,即从底层开始逐层向顶层回溯。可以使用层次遍历(广度优先搜索,BFS)结合栈来解决这个问题。
算法步骤如下:
1. 初始化一个空栈,将根节点压入栈中。同时初始化一个结果列表 `right_view` 来存放右视图中的节点值。
2. 当栈不为空时,进行以下操作:
a. 弹出栈顶节点,将其值添加到 `right_view` 中,因为它将是这一层的右视图。
b. 如果该节点的右孩子存在,将其右孩子压入栈;如果左孩子存在,也压入栈,因为我们关心的是最左侧节点。
3. 循环结束后,`right_view` 中的元素就是二叉树的右视图。
以下是伪代码表示:
```python
def rightView(root):
if not root:
return []
stack, right_view = [(root, 0)], [] # 初始化栈和结果列表
while stack:
node, level = stack.pop()
if level == len(right_view): # 新的一层开始
right_view.append(node.val) # 添加右视图节点值
if node.left: # 左孩子
stack.append((node.left, level + 1))
if node.right: # 右孩子
stack.append((node.right, level))
return right_view
```
阅读全文