定义树的结点
class node:
def __init__(self,data):
self.data = data
self.left = None
self.right = None
定义树的class,包含初始化函数、插入结点函数、三种遍历
class BinaryTree:
def __init__(self,data):
self.root = node(data)
#递归调用自己
def insert(self,data,root:node):
#如果data小于当前结点的data,则根据二叉树左边<中间<右边的定理,因此我们需要判断它有没有左孩子,如果有,则
if data < root.data:
#如果左孩子不为空,则以当前左孩子作为新的结点参数,调用insert函数,继续查找合适的位置进行插入
if root.left:
self.insert(data,root.left)
else:
#如果当前左孩子为空,则新建值为data的node结点,作为左孩子
root.left = node(data)
#如果data大于当前结点的data,则我们需要将它插入到右边,因此我们需要判断它有没有右孩子,如果有,则需要继续往下查找
elif data > root.data:
#如果右孩子不为空,则将当前右孩子作为新的参数,调用insert函数
if root.right:
self.insert(data,root.right)
else:
root.right = node(data)
else:
print("Repeated value,can't insert")
def pre_order_print(self,root:node):
print(root.data)
if root.left:
self.pre_order_print(root.left)
if root.right:
self.pre_order_print(root.right)
def in_order_print(self,root:node):
if root.left:
self.in_order_print(root.left)
print(root.data)
if root.right:
self.in_order_print(root.right)
def post_order_print(self,root:node):
if root.left:
self.post_order_print(root.left)
if root.right:
self.post_order_print(root.right)
print(root.data)
调用class建树
myTree = BinaryTree(10)
mylist = [3,5,7,13,23,22,12,11,10]
for item in mylist:
myTree.insert(item,myTree.root)
myTree.in_order_print(myTree.root)