平衡二叉树
平衡二叉树
特点: 任意节点左右子树的高度不超过1
反例:
10节点的左子树高度为0,右子树高度为3
这是平衡二叉树
这也是平衡二叉树
如何保持平衡
添加一个节点后,该树不再是平衡二叉树-》旋转
左旋,多余左节点做右节点
复杂的左旋
10的多余左节点9。给予前父节点7作为右节点
右旋 ,多余右节点做左节点
复杂右旋
4的多余右节点5,给予前父节点7作为左节点
需要旋转的4种情况
左左
根节点的左子树的左子树(在这张图上指{2}的分支)
有节点插入,导致不平衡。
左子树{4}的分支
左子树的左子树 {2}的分支
注意,{2}->{3}也是左左的情况
一次右旋就可以平衡
左右
根节点的左子树的右子树(图中指{5}的分支)
有节点插入,导致二叉树不平衡
一次右旋之后,没有平衡,再继续左旋右旋操作也没有平衡
回归最初状态
先进行局部左旋(紫色部分),转化为左左
一次整体右旋后,平衡
右右
根节点的右子树的右子树(图中{11}的分支)
有节点插入,导致二叉树不平衡
经过一次左旋平衡
右左
根节点的右子树的左子树(图中指{9}的分支)
有节点插入,导致二叉树不平衡
局部右旋,转化为右右
经过整体左旋,平衡
总结
平衡二叉树
- 任意节点的左右子树的高度差不超过1的二叉树
平衡二叉树保持平衡的方法
左旋
提升第一个失衡的节点为父节点
原父节点降级为失衡节点的左节点
失衡节点多余的左节点成为原父节点的右节点
右旋
提升第一个失衡的节点为父节点
原父节点降级为失衡节点的右节点
失衡节点多余的右节点成为原父节点的左节点
平衡二叉树不平衡的4个情况
左左
根节点左子树的左子树中插入节点后导致的不平衡
经过一次右旋解决
左右
根节点左子树的右子树中插入节点后导致的不平衡
先经过一次局部左旋,转化为左左
再经过一次整体右旋解决
右右
根节点右子树的右子树中插入节点后导致的不平衡
经过一次左旋解决
右左
根节点右子树的左子树中插入节点后导致的不平衡
先经过一次局部右旋,转化为右右
再经过一次左旋解决
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话