题解 | #输出二叉树的右视图#

输出二叉树的右视图

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)  # 获取右视图  
       

全部评论

相关推荐

点赞 评论 收藏
分享
11-08 17:36
诺瓦科技_HR
点赞 评论 收藏
分享
1 收藏 评论
分享
牛客网
牛客企业服务