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

输出二叉树的右视图

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


class Solution:
    def solve(self , xianxu: List[int], zhongxu: List[int]) -> List[int]:
        # write code here
        def reBuildTree(preleft, preright, inleft, inright):
            if preleft > preright: return None
            preroot = preleft
            inroot = index[xianxu[preroot]]
            left_res = inroot - inleft
            
            root = TreeNode(xianxu[preroot])
            
            root.left = reBuildTree(preleft+1, preleft+left_res, inleft, inroot-1)
            root.right = reBuildTree(preleft+left_res+1, preright, inroot+1, inright)
            return root
        
        n = len(xianxu)
        index = {element: i for i, element in enumerate(zhongxu)}
        root = reBuildTree(0, n-1, 0, n-1)#重建二叉树
        
        #层序遍历, 打印每层最右
        queue = [root]
        res = []
        while queue:
            res.append(queue[-1].val)
            tmp = []
            for node in queue:
                if node.left: tmp.append(node.left)
                if node.right: tmp.append(node.right)
            queue = tmp
        return res
        

全部评论

相关推荐

努力学习的小绵羊:我反倒觉得这种挺好的,给不到我想要的就别浪费大家时间了
点赞 评论 收藏
分享
头像
10-16 09:58
已编辑
门头沟学院 Java
点赞 评论 收藏
分享
1 收藏 评论
分享
牛客网
牛客企业服务