平衡二叉树

一、平衡二叉树

平衡二叉树(balanced binary tree)又称AVL树(Adelson-Velskii and Landis)

一棵平衡二叉树或者是空树,或者是具有下列性质的二叉排序树:

  1. 左子树与右子树的高度之差的绝对值小于等于1;
  2. 左子树和右子树也是平衡二叉排序树

为了方便起见,给每个结点附加一个数字,给出该结点左子树与右子树的高度差.这个数字称为结点的平衡因子(BF).

平衡因子 = 结点左子树的高度 - 结点右子树的高度

根据平衡二叉树的定义,平衡二叉树上所有结点的平衡因子只能是-1,0,或1.

对于一棵有n个结点的AVL树,其高度保持在O(log2^n)数量级

二、二叉搜索树

  1. 若它的左子树不空,则左子树上所有结点的值均小于它根结点的值。
  2. 若它的右子树不空,则右子树上所有结点的值均大于它根结点的值。
  3. 它的左、右树又分为⼆叉排序树.

二叉搜索树中序遍历有序

三、失衡二叉排序树的分析与调整

当我们在一个平衡二叉排序树上插入一个结点时,有可能导致失衡,不再是一个平衡二叉排序树,即出现平衡因子绝对值大于1的结点.

如果在一棵AVL树中插入一个新结点后造成失衡,则必须重新调整树的结构,使之恢复平衡

平衡调整的四种类型:

具体的调整为:

调整原则为:1)降低高度 2)保持二叉排序树的性质

规律:按照二叉排序树的性质,挑选3个值的中间值作为调整后的根结点,最小值为根结点的左孩子,最大值为根结点的右孩子.

posted @   ImreW  阅读(197)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示