树的各类算法

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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值