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

输出二叉树的右视图

http://www.nowcoder.com/practice/c9480213597e45f4807880c763ddd5f0

思路:写树类 根据先序中序构建二叉树 然后使用层次遍历

alt

# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 求二叉树的右视图
# @param xianxu int整型一维数组 先序遍历
# @param zhongxu int整型一维数组 中序遍历
# @return int整型一维数组
#
class Solution:
    def solve(self , xianxu: List[int], zhongxu: List[int]) -> List[int]:
        # 先恢复二叉树 然后打印层次遍历的最后一个节点
        if len(xianxu)==1 or  len(zhongxu)==1:return xianxu
        def huifu(xianxu,zhongxu):
            if len(xianxu)==0 or len(xianxu)==0:return None
            root=treeNode(xianxu[0])
            root_idx=zhongxu.index(root.val)
            root.left=huifu(xianxu[1:root_idx+1],zhongxu[:root_idx])
            root.right=huifu(xianxu[root_idx+1:],zhongxu[root_idx+1:])
            return root
        def ceng_order(root):
            if root is None:return None
            stack,res=[root],[]
            while stack:
                ceng_nodes=[]
                for i in range(len(stack)):
                    node=stack.pop(0)
                    ceng_nodes.append(node.val)
                    if node.left:stack.append(node.left)
                    if node.right:stack.append(node.right)
                res.append(ceng_nodes[-1])
            return res
        root= huifu(xianxu,zhongxu)
        res=ceng_order(root)
        return res
class treeNode():
    def __init__(self,val,left=None,right=None):
        self.val=val
        self.left=left
        self.right=right
            
全部评论

相关推荐

牛客771574427号:恭喜你,华杰
点赞 评论 收藏
分享
11-03 14:38
重庆大学 Java
AAA求offer教程:我手都抬起来了又揣裤兜了
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务