题解 | #输出二叉树的右视图#
输出二叉树的右视图
https://www.nowcoder.com/practice/c9480213597e45f4807880c763ddd5f0
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 求二叉树的右视图
# @param preOrder int整型一维数组 先序遍历
# @param inOrder int整型一维数组 中序遍历
# @return int整型一维数组
#
def buildTree(preOrder, inOrder):
"""
根据前序遍历和中序遍历的结果重建二叉树
:param preOrder: 前序遍历的列表
:param inOrder: 中序遍历的列表
:return: 重建的二叉树的根节点
"""
if not preOrder or not inOrder:
return None # 如果前序遍历或中序遍历为空,则返回None
root = TreeNode(preOrder[0]) # 创建根节点,值为前序遍历的第一个元素
mid = inOrder.index(preOrder[0]) # 在中序遍历中找到根节点的位置
# 递归构建左子树和右子树
root.left = buildTree(preOrder[1:mid+1], inOrder[:mid])
root.right = buildTree(preOrder[mid+1:], inOrder[mid+1:])
return root # 返回根节点
def rightSideView(root):
"""
获取二叉树的右视图
:param root: 二叉树的根节点
:return: 右视图的列表
"""
if not root:
return [] # 如果树为空,则返回空列表
result = [] # 存储右视图的列表
queue = [root] # 使用队列进行层序遍历
while queue:
level_length = len(queue) # 当前层的节点数
for i in range(level_length):
node = queue.pop(0) # 弹出当前层的节点
if i == level_length - 1: # 如果是当前层的最右节点
result.append(node.val) # 将其值添加到右视图中
if node.left:
queue.append(node.left) # 如果存在左子节点,则将其添加到队列中
if node.right:
queue.append(node.right) # 如果存在右子节点,则将其添加到队列中
return result # 返回右视图
class Solution:
def solve(self , preOrder: List[int], inOrder: List[int]) -> List[int]:
root = buildTree(preOrder, inOrder) # 重建二叉树
return rightSideView(root) # 获取右视图


OPPO公司福利 1056人发布