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
python实现重建二叉树
猜你喜欢
转载自blog.csdn.net/z2539329562/article/details/79875642
今日推荐
周排行