平衡二叉树

平衡二叉树


特点: 任意节点左右子树的高度不超过1

反例:

10节点的左子树高度为0,右子树高度为3


这是平衡二叉树

这也是平衡二叉树


如何保持平衡

添加一个节点后,该树不再是平衡二叉树-》旋转


左旋,多余左节点做右节点

复杂的左旋

10的多余左节点9。给予前父节点7作为右节点


右旋 ,多余右节点做左节点

复杂右旋

4的多余右节点5,给予前父节点7作为左节点


需要旋转的4种情况

左左

根节点左子树左子树(在这张图上指{2}的分支)

有节点插入,导致不平衡。

左子树{4}的分支

左子树的左子树 {2}的分支

注意,{2}->{3}也是左左的情况

一次右旋就可以平衡


左右

根节点左子树右子树(图中指{5}的分支)

有节点插入,导致二叉树不平衡

一次右旋之后,没有平衡,再继续左旋右旋操作也没有平衡


回归最初状态

先进行局部左旋(紫色部分),转化为左左

一次整体右旋后,平衡


右右

根节点右子树右子树(图中{11}的分支)

有节点插入,导致二叉树不平衡

经过一次左旋平衡


右左

根节点右子树左子树(图中指{9}的分支)

有节点插入,导致二叉树不平衡

局部右旋,转化为右右

经过整体左旋,平衡


总结

平衡二叉树

  • 任意节点的左右子树的高度差不超过1的二叉树

平衡二叉树保持平衡的方法

  • 左旋

    • 提升第一个失衡的节点为父节点

    • 原父节点降级为失衡节点的左节点

    • 失衡节点多余的左节点成为原父节点的右节点

  • 右旋

    • 提升第一个失衡的节点为父节点

    • 原父节点降级为失衡节点的右节点

    • 失衡节点多余的右节点成为原父节点的左节点

平衡二叉树不平衡的4个情况

  • 左左

    • 根节点左子树的左子树中插入节点后导致的不平衡

    • 经过一次右旋解决

  • 左右

    • 根节点左子树的右子树中插入节点后导致的不平衡

    • 先经过一次局部左旋,转化为左左

    • 再经过一次整体右旋解决

  • 右右

    • 根节点右子树的右子树中插入节点后导致的不平衡

    • 经过一次左旋解决

  • 右左

    • 根节点右子树的左子树中插入节点后导致的不平衡

    • 先经过一次局部右旋,转化为右右

    • 再经过一次左旋解决

posted @   HIK4RU44  阅读(18)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话
点击右上角即可分享
微信分享提示