Exemplo n.º 1
0
    def build1(inorder, postorder):
        if not inorder:
            return None
        elif len(inorder) == 1:
            return TreeNode(inorder[0])
        else:
            postorder_root_val = postorder[-1]
            root = TreeNode(postorder_root_val)
            for i in range(len(inorder)):
                if postorder_root_val == inorder[i]:
                    inorder_root_index = i
                    break
            if inorder_root_index == 0:
                root.left = None
                root.right = build1(inorder[1:], postorder[:-1])
            elif inorder_root_index == len(inorder) - 1:
                root.left = build1(inorder[:-1], postorder[:-1])
                root.right = None
            else:
                root.left = build1(inorder[:inorder_root_index],
                                   postorder[:inorder_root_index])
                root.right = build1(inorder[inorder_root_index + 1:],
                                    postorder[inorder_root_index:-1])

        return root
 def deserialize_tree(s):
     if not s:
         return
     val = s.pop(0)
     root = None
     if val != 'null':
         root = TreeNode(val)
         root.left = deserialize_tree(s)
         root.right = deserialize_tree(s)
     return root
Exemplo n.º 3
0
    def build1(preorder, inorder):
        if not preorder:
            return None
        if len(preorder) <= 1:
            return TreeNode(preorder[0])
        root_node = preorder[0]
        root = TreeNode(root_node)
        for i in range(len(inorder)):
            if root_node == inorder[i]:
                inorder_root_node_index = i
                break

        root.left = build1(preorder[1:inorder_root_node_index + 1],
                           inorder[:inorder_root_node_index])
        root.right = build1(preorder[inorder_root_node_index + 1:],
                            inorder[inorder_root_node_index + 1:])

        return root
Exemplo n.º 4
0
def before_middle_construct_tree(before_seq, middle_seq):
    """
    根据二叉树的前序遍历和中序遍历重建二叉树
    :param before_seq: List[int]
    :param middle_seq: List[int]
    :return: TreeNode
    """
    if len(before_seq) == 0 or len(middle_seq) == 0:
        return
    root_node = TreeNode(before_seq[0])
    root_index = middle_seq.index(root_node.val)
    left_node = before_middle_construct_tree(before_seq[1:root_index + 1],
                                             middle_seq[:root_index])
    right_node = before_middle_construct_tree(before_seq[root_index + 1:],
                                              middle_seq[root_index + 1:])
    root_node.left = left_node
    root_node.right = right_node
    return root_node