class TreeNode(object):     def __init__(self,x):         self.val = x         self.left = None         self.right = None class Solution(object):     tree = None     pre = []     post = []     end = []     def preorder(self,root):         if not root:             return         self.pre.append(root.val)         self.preorder(root.left)         self.preorder(root.right)     def postorder(self,root):         if not root:             return         self.postorder(root.left)         self.postorder(root.right)         self.post.append(root.val)     def endnode(self,root):         if not root:             return []         queue1 = [root]         queue2 = []         while queue1:             cur = queue1.pop(0)             if not cur.left and not cur.right:                 self.end.append(cur.val)             if cur.left:                 queue2.append(cur.left)             if cur.right:                 queue2.append(cur.right)             if queue1 == []:                 queue1 = queue2                 queue2 = []     def build(self, sub_levelorder, sub_inorder):         if sub_inorder == []:             return None         root_value = sub_levelorder[0]         root = TreeNode(root_value)         index = sub_inorder.index(root_value)         left_sub_inorder = sub_inorder[:index]         right_sub_inorder = sub_inorder[index + 1:]         left_sub_levelorder,right_sub_levelorder = [],[]        # 按照层次遍历,第一个出现的就是根节点,然后找到中序中根节点的位置,分成左右两个子树的中序。再根据这个中序的序列,找到左右子树层次遍历的序列        # 考试的时候这一步没做好,一直做不出来,看了@ningshixian的做法。         for each in sub_levelorder[1:]:             if each in left_sub_inorder:                 left_sub_levelorder.append(each)             else:                 right_sub_levelorder.append(each)         root.left = self.build(left_sub_levelorder, left_sub_inorder)         root.right = self.build(right_sub_levelorder, right_sub_inorder)         return root     def buildTree(self, levelorder, inorder):         """         :type preorder: List[int]         :type inorder: List[int]         :rtype: TreeNode         """         if levelorder == [] or inorder == []:             return None         self.tree = self.build(levelorder, inorder)
点赞 评论

相关推荐

烤点老白薯:可以 除了名字都偷了
点赞 评论 收藏
分享
01-18 09:26
已编辑
门头沟学院 Java
王桑的大offer:建议中间件那块写熟悉即可,写掌握 面试包被拷打到昏厥
点赞 评论 收藏
分享
牛客网
牛客企业服务