class Tree:
def __init__(self,key,left=None,right=None,par=None):
self.key,self.left,self.right,self.par=key,left,right,par
def inorder(t):
if t!=None:
inorder(t.left)
print(t.key,end=' ')
inorder(t.right)
def tree_search(x,k):
if x==None or x.key==k:
return x
if k<x.key:
return tree_search(x.left,k)
else:
return tree_search(x.right,k)
def iterative_search(x,k):
while x!=None and x.key!=k:
if k<x.key:
x=x.left
else:
x=x.right
return x
def tree_mini(x):
while x!=None and x.left!=None:
x=x.left
return x
def tree_max(x):
while x!=None and x.right!=None:
x=x.right
return x
#something wrong???
#def tree_successor(x):
#if x.right!=None:
#return tree_mini(x.right)
#y=x.par
#while y!=None and
def tree_insert(T,x):
if T==None:
T=x
elif T.key==x.key:
pass
elif x.key<T.key:
T.left=tree_insert(T.left,x)
else:
T.right=tree_insert(T.right,x)
return T
def tree_delete_key(T,x):
if T==None:
return None
elif x<T.key:
T.left=tree_delete_key(T.left,x)
return T
elif x>T.key:
T.right=tree_delete_key(T.right,x)
return T
elif T.left==None: return T.right
elif T.left.right==None:
T.left.right=T.right
return T.left
else:
pre=T.left;cur=T.left.right
while(cur.next!=None):
pre,cur=cur,cur.next
pre.right=cur.left
cur.left=T.left
cur.right=T.right
return cur
t=None
from random import choice,seed
seed(1)
for i in range(1,10):
t=tree_insert(t,Tree(choice(range(1,100))))
print("before delete")
inorder(t)
t=tree_delete_key(t,98)
print("\nafter delete")
inorder(t)
树的各类算法
最新推荐文章于 2024-08-04 21:08:26 发布