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)