class Btree(object):
def __init__(self,data=None,left=None,right=None):
self.count=0
self.data=data
self.right=right
self.left=left
self.dot = Digraph(comment='Binary Tree')
def Insert(self,root,x):
if root is None:
root=Btree(x)else:
if x<root.data:
root.left=Insert(root.left,x)
elif x>root.data:
root.right=Insert(root.right,x)
return root
def Delete(self,root,x):
if root:
if x < root.data:
root.left = Delete(root.left, x)
elif x > root.data:
root.right = Delete(root.right, x)
elif root.right and root.left:
tim = FindMin(root.right)
root.data = tim.data
root.right = Delete(root.right, tim.data)else:
if root.left is None:
root = root.right
elif root.right is None:
root = root.left
return root
def FindMin(self,root):
if root:
while (root.left):
root = root.left
return root
def preorder(self):
if self.data is not None:print(self.data," ")
if self.left is not None:
self.left.preorder()
if self.right is not None:
self.right.preorder()
def inorder(self):
if self.left is not None:
self.left.inorder()
if self.data is not None:print(self.data," ")
if self.right is not None:
self.right.inorder()
def postorder(self):
if self.left is not None:
self.left.postorder()
if self.right is not None:
self.right.postorder()
if self.data is not None:print(self.data," ")
def create_BTree_By_List(array):
i = 1
# 将原数组拆成层次遍历的数组,每一项都储存这一层所有的节点的数据
level_order = []
sum = 1
while sum < len(array):
level_order.append(array[i-1:2*i-1])
i *= 2
sum += i
level_order.append(array[i-1:])
#print("level_order:",level_order)
# BTree_list: 这一层所有的节点组成的列表
# forword_level: 上一层节点的数据组成的列表
def Create_BTree_One_Step_Up(BTree_list, forword_level):
new_BTree_list = []
i = 0
for elem in forword_level:
root = BTree(elem)
if 2*i < len(BTree_list):
root.left = BTree_list[2*i]
if 2*i+1 < len(BTree_list):
root.right = BTree_list[2*i+1]
new_BTree_list.append(root)
i += 1
return new_BTree_list
# 如果只有一个节点
if len(level_order) == 1:
return BTree(level_order[0][0])else: # 二叉树的层数大于1
# 创建最后一层的节点列表
BTree_list = [BTree(elem) for elem in level_order[-1]]
# 从下往上,逐层创建二叉树
for i in range(len(level_order)-2, -1, -1):
BTree_list = Create_BTree_One_Step_Up(BTree_list, level_order[i])
return BTree_list[0]