python实现重建二叉树

class TreeNode:                     #树节点
    def __init__(self, elem, left_child=None, right_child=None):
        self.elem = elem
        self.left = left_child
        self.right = right_child

class Queue:                        #实现一个简易队列
    def __init__(self):
        self.elems = []

    def is_empty(self):
        return len(self.elems) == 0

    def enqueue(self, elem):
        self.elems.append(elem)

    def dequeue(self):
        if len(self.elems) == 0:
            return None
        return self.elems.pop(0)

def reConstructBinaryTree(pre_tree, in_tree):
    if len(pre_tree) == 0:
        return None
    if len(pre_tree) == 1:
        return TreeNode(pre_tree[0])
    else:
        root = TreeNode(pre_tree[0])
        #左子树
        root.left = reConstructBinaryTree(pre_tree[1:in_tree.index(pre_tree[0])+1], in_tree[:in_tree.index(pre_tree[0])])
        #右子树
        root.right = reConstructBinaryTree(pre_tree[in_tree.index(pre_tree[0])+1:], in_tree[in_tree.index(pre_tree[0])+1:])
        return root

pre_tree = [1, 2, 4, 7, 3, 5, 6, 8]
in_tree = [4, 7, 2, 1, 5, 3, 8, 6]
if __name__ == "__main__":
    root = reConstructBinaryTree(pre_tree, in_tree)
    print("-------------")
    rootQueue = Queue()                  #创建队列
    rootQueue.enqueue(root)
    i = 0
    while True:
        x = rootQueue.dequeue()          #采用层序遍历
        print(x.elem)
        if x is not None:
            if x.left is not None:
                rootQueue.enqueue(x.left)
            if x.right is not None:
                rootQueue.enqueue(x.right)
        if rootQueue.is_empty():
            break

猜你喜欢

转载自blog.csdn.net/z2539329562/article/details/79875642