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实现重建二叉树
最新推荐文章于 2022-04-11 20:28:30 发布