python AVL树(详细注释)

        AVL树本质是二叉搜索树,但它又具有以下特点:只能是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树也分别满足同样条件。在AVL树中任何结点的两个子树的高度最大差别为一,所以它也被称为平衡二叉树。

#AVL树(二叉平衡树)
#节点类。AVL树相对一般二叉搜索树,节点增加树高属性,便于判断是否平衡,从而决定是否进行调整等。
class TreeNode(object):
    def __init__(self, data, left=None, right=None):
        self.data = data
        self.left = left
        self.right = right
        self.height = 0
#AVL树类
class AVLTree(object):
    #初始化函数和一般二叉树、二叉搜索树相同,只需创建空的根节点
    def __init__(self):
        self.root = None
    #find为公有方法(可以对外暴露),判断key是否在avl树中。
    #与私有的_find相比,增加【树根是否为空】的判断;
    #一般二叉搜索树查找也常用这种公有私有机制。
    def find(self, key):
        #树根为空则返回空,没找到
        if not self.root:
            return None
        #否则传入树的根节点寻找
        else:
            return self._find(key, self.root)
    #私有化方法,寻找以node为根的树或者子树中是否存在键值为key的元素
    def _find(self, key, node):
        #如果node为空,则无法找到相应key值,返回空
        if not node:
            return None
        #如果要找key小于当前节点数据,到左子树中找
        elif key < node.data:
            
            return self._find(key, node.left)
        #如果要找的key大于当前节点存储数据,到当前节点的右子树找
        elif key > node.data:
            return self._find(key, node.right)
        #以上(不包括return None)用于递归向下延申,缩小问题规模的过程
        #以上条件都不满足,说明这个节点存储的数据与key值相等,也就是找到了相应的元素,将这个节点返回即可
        else:
            #用于递归向上返回结果过程
            #这里的return,是将最后返回的node值一层层原样返回到上一层递归函数,最终返回的就是那个找到的node
            return node
    #寻找avl树中的最小元素。
    #类似地,公有方法增加树根空与否的判断
    def findMin(self):
        if self.root is None:
            return None
        #树根不空,返回树的最小值
        else:
            return self._findMin(self.root)
    #私有方法,增加传入参数node便于递归
    def _findMin(self, node):
        #avl树最小值出现在最左侧的叶子节点。
        #只要当前节点还有左孩子节点,左孩子节点就比当前节点小,转到左孩子节点继续向下寻找
        if node.left:
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值