python实现 平衡二叉搜索树(AVL树)

class BinarySerachTree:
    def __init__(self):
        self.root=None
        self.size=0
    def length(self):
        return self.size 
    def put(self,key,val):
        if self.root:
            self._put(key,val,self.root)
        else :
            self.root=TreeNode(key,val)
        self.size+=1
    def _put(self,key,val,currentNode):
        if key <currentNode.key:
            if currentNode.hasLeftChild():
                self._put(key,val,currentNode.leftChild)
            else :
                currentNode.leftChild=TreeNode(key,val,parent=currentNode)
        elif key > currentNode.key:
            if currentNode.hasRightChild():
                self._put(key,val,currentNode.rightChild)
            else :
                currentNode.rightChild=TreeNode(key,val,parent=currentNode)
                
        else :
            currentNode.replaceNodeData(key,val,currentNode.leftChild,currentNode.rightChild)
    def get(self,key):
        if self.root:
            res=self._get(key,self.root)
            if res:
                return res.payload 
            else :
                return None 
        else :
             return None 
    def _get(self,key,currentNode):
        if key < currentNode.key :
            if currentNode.hasLeftChild():
                return self._get(key,currentNode.leftChild)
            else :
                return None 
        elif key > currentNode.key :
            if currentNode.hasRightChild():
                return self._get(key,currentNode.rightChild)
            else :
                return None 
        else :
            return currentNode
    def gethead(self,currentNode):
        if currentNode.leftChild and currentNode.rightChild:
            return 1+max(self.gethead(currentNode.leftChild),self.gethead(currentNode.rightChild))
        elif currentNode.leftChild is None and currentNode.rightChild is not None :
            return 1+self.gethead(currentNode.rightChild)
        elif currentNode.leftChild is not None and currentNode.rightChild is None :
            return 1+self.gethead(currentNode.leftChild)
        else :
            return 0 
    def __getitem__(self,key):
        return self.get(key)
    def __setitem__(self,k,v):
        self.put(k,v)
    def __len__(self):  #为了可以使用len()来查看长度
        return self.size 
    def __iter__(self):  #为了可以使用迭代算法
      return self.root.__iter__()
    def __contains__(self,key):
        if self.get(key):
            return True
        else :
            return False
    def delete(self,key):
        if self.size > 1:
            nodeToRemove=self._get(key,self.root)
            if nodeToRemove:
    
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值