用python写的一个简单二叉树排序类

#coding:utf-8
max_val = [99999999,-99999999]
class Mysort(object):
    "Mysort to sort a int array"
    
    def __init__(self,List):
        self.mylist = List
        self.bs = ''
        self.Dict ={0:min,1:max}
        self.select = ''
    
    def buildTree(self,rt,L,R):#树一棵二叉树,每个节点维护当前子树的最小值(最大值)
        mid = (L + R) // 2
        if(L==R):
            self.bs[rt] = self.mylist[L]
        else:
            self.buildTree(rt*2,L,mid)
            self.buildTree(rt*2+1,mid+1,R)
            self.bs[rt] = self.Dict[self.select](self.bs[rt*2],self.bs[rt*2+1])
        return self.bs[rt]
    
    def get_updata(self,rt,L,R):#每调用一次,则返回最小值(最大值),并将这个值所在的位置置为最小值(最大值)
        mid = (L + R) // 2
        ans = ''
        if(L==R):
            ans = self.bs[rt]
            self.bs[rt] = max_val[self.select]
            return ans
        if(self.bs[rt]==self.bs[rt*2]):
            ans = self.get_updata(rt*2, L, mid)
        else:
            ans = self.get_updata(rt*2+1, mid+1, R)
        self.bs[rt] = self.Dict[self.select](self.bs[rt*2],self.bs[rt*2+1])
        return ans
    
    def sort_begin(self,sel = 0):#调用这个函数就可以对传进来的数组进行排序,并返回排好的结果
        self.bs = [max_val[sel] for i in range(len(self.mylist)*4+10)]
        if(len(self.mylist)==0):
            return []
        self.select = sel
        self.buildTree(1, 0, len(self.mylist)-1)
        return [self.get_updata(1, 0, len(self.mylist)-1) for i in self.mylist]
    
array = [9999,1, 2, 5, 3, 6, 8, 4, 10, 123]
mysort = Mysort(array)
print mysort.sort_begin(0)#0为升序
print mysort.sort_begin(1)#1为降序     ....这个怎么用装饰器来实现呢???

 

posted on 2013-03-08 22:46  aigoruan  阅读(628)  评论(1)    收藏  举报

导航