平衡二叉树和二叉排序树

二叉排序树,简单而言就是左子树上所有节点的值均小于根节点的值,而右子树上所有结点的值均大于根节点的值,左小右大,并不是乱序,因此得名二叉排序树。

平衡二叉树是在二叉排序树的基础上发展而来的。平衡二叉树,又称AVL树,指的是左子树上的所有节点的值都比根节点的值小,而右子树上的所有节点的值都比根节点的值大,且左子树与右子树的高度差最大为1。因此,平衡二叉树满足所有二叉排序(搜索)树的性质。

有了二叉排序树就可以使插入、搜索效率大大提高了,为什么还要引入平衡二叉树?  二叉搜索树的结构与值的插入顺序有关,同一组数,若其元素的插入顺序不同,二叉搜索树的结构是千差万别的。举个例子,给出一组数[1,3,5,8,9,13]。  若按照[5,1,3,9,13,8]这样的顺序插入,其流程是这样的:  

若按照[1,3,5,8,9,13]这样的顺序插入,其流程是这样的:

如果在上面的二叉搜索树中查找13,是要将所有节点都遍历一遍的,时间复杂度就变成了O(n),几乎就是一个链表。  细心的朋友可能已经发现,插入的序列越接近有序,生成的二叉搜索树就越像一个链表。  为了避免二叉搜索树变成“链表”,我们引入了平衡二叉树,即让树的结构看起来尽量“均匀”,左右子树的节点数尽量一样多。

判断二叉树是否是平衡二叉树

首先构建一个新的函数求树的最大深度,然后求左子树最大深度,右子树最大深度,两者之差大于1就return false,然后菜判断左右子树是不是分别依旧是高度平衡树,结束。

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值