class BiTreeNode:
def __init__(self,data):
self.data = data
self.lchild = None
self.rchild = None
self.parent = None
class BST:
def __init__(self,li=None):
self.root = None #初始化根节点
if li: #
for val in li: #把列表中的值都排序一下
self.not_digui_insert(val)
def insert(self,node,val): #递归
if not node:
node = BiTreeNode(val)
elif val <node.data:
self.insert(node.lchild,val)
node.lchild.parent = node
elif val>node.data:
self.insert(node.rchild,val)
node.lchild.parent = node
return node
def not_digui_insert(self,val): #把列表中的元素按照二叉树的方式排列一下
p = self.root #初始化根节点,小于根节点的放结点的左边,大于的放右边
if not p:
self.root = BiTreeNode(val)
return
while True:
if val<p.data:
if p.lchild:
p=p.lchild
else: #左孩子不存在
p.lchild = BiTreeNode(val)
p.lchild.parent = p
return
elif val >p.data:
if p.rchild:
p=p.rchild
else:
p.rchild = BiTreeNode(val)
p.rchild.parent = p
return
else:
return
def pre_ord(self,root):
if root:
print(root.data,end=',')
self.pre_ord(root.lchild)
self.pre_ord(root.rchild)
def in_ord(self,root):
if root:
self.in_ord(root.lchild)
print(root.data, end=',')
self.in_ord(root.rchild)
def post_ord(self,root):
if root:
self.post_ord(root.lchild)
self.post_ord(root.rchild)
print(root.data, end=',')
pre =BST([2,5,6,8,1,4,7,9])
pre.post_ord(pre.root)
print()
mid =BST([2,5,6,8,1,4,7,9])
mid.in_ord(mid.root)
print()
fina = BST([2,5,6,8,1,4,7,9])
fina.pre_ord(fina.root)
print()
【二叉搜索树-插入篇】
于 2023-09-30 19:47:45 首次发布