前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >AVL树(自平衡二叉树)

AVL树(自平衡二叉树)

作者头像
Harper
发布2021-07-27 09:36:09
3230
发布2021-07-27 09:36:09
举报
文章被收录于专栏:Harper的碎碎念

特点

  • 二叉树
  • 同节点左右子树高度差不超过1 复杂度
  • 插入、查找、删除均为O(logN)

节点数

  • 最多(满二叉树) 2^h-1
  • 最少 2^(h-1)

规则

旋转:

  • 左旋:节点的左旋,节点的右孩子指针指向节点右孩子的左孩子,节点的右孩子的左孩子指针指向节点。
  • 右旋:节点的右旋,节点的左孩子指针指向节点左孩子的右孩子,节点的左孩子的右孩子指针指向节点。

平衡因子:

  • 平衡因子=左子树高度-右子树高度

导致AVL Tree不平衡的几种类型及调整方法:

插入:

  • LL:节点的左(L)子树的左(L)子树因为存在非空子节点,导致与节点的右子树高度差超过1 (右旋)
  • LR:节点的左(L)子树的右(R)子树因为存在非空子节点,导致与节点的右子树高度差超过1 (先左旋再右旋)
  • RL:节点的右(R)子树的左(L)子树因为存在非空子节点,导致与节点的左子树高度差超过1 (先右旋再左旋)
  • RR:节点的右(R)子树的右(R)子树因为存在非空子节点,导致与节点的左子树高度差超过1 (左旋)

删除:

  • 删除叶子结点,删除之后判断一下是否平衡
  • 删除只带有左子树或右子树的节点,直接把子树节点接上就行了
  • 删除带有左右子树的节点,找其左子树的最大节点或者是其右子树的最小节点交换值,然后删除被交换节点(规则跟删除叶子结点一样了)。选择左子树的最大节点还是右子树最小节点可以根据左右子树高度选择,优先选高的子树,这样更快趋于平衡。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017-11-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 特点
  • 节点数
  • 规则
    • 旋转:
      • 平衡因子:
        • 插入:
          • 删除:
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档