题解 | #输出二叉树的右视图#
输出二叉树的右视图
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) # 获取右视图