2021.0827 快手摸底(三)二叉树

你所了解的二叉树结构?

  • 节点的度:节点拥有子树的数目叫做节点的度,叶子节点的度为0
  • 树的度:树内各结点的度的最大值。

<1>满二叉树(完美二叉树)
一个二叉树,每一层的结点树都达到最大值。也就是说,最后一层结点外,每一层上的任何结点都有两个子节点。
在这里插入图片描述

<2>完全二叉树
只有最下面两层节点的度小于2,并且最下面一层的结点都集中在该层的左边的若干位置。
性质:对树中的结点从上到下、从左至右编号,如果编号为i的结点与满二叉树中编号为i的结点在二叉树中的位置相同,则该棵二叉树为完全二叉树。
在这里插入图片描述
满二叉树是完全二叉树的特殊形态,如果一棵树是满二叉树,那它必然是完全二叉树。

<3>

  • 大顶堆:左右子树的结点值比根结点,左右子树也都是大顶堆。
  • 小顶堆:左右子树的结点值比根结点,左右子树也都是小顶堆。

<4>二叉排序树(二叉查找树)
子树上的值都于根结点的值,子树上的值都于根结点的值,左右子树也都是二叉排序树。
在这里插入图片描述
Java之二叉排序树

<5>二叉平衡树(AVL树)
是一棵二叉排序树,且左右子树高度差不超过1,左右子树都为二叉平衡树。
在这里插入图片描述
左、右两棵树都是二叉排序树,但只有右边这棵是二叉平衡树。

  • 平衡因子:某节点左子树和右子树高度差称为该节点的平衡因子。
    在这里插入图片描述
    当新节点没有插入的时候,该树是一棵平衡二叉树,但当新节点插入的时候,破坏了平衡二叉树的结构,沿着新插入的点往上找,找到第一个**|平衡因子|>=2的节点,以该节点为根节点的子树称为最小失衡子树**,平衡二叉树的失衡调整主要是针对调整最小失衡树来实现的。

1,左孩+左孩---->右旋
在这里插入图片描述
当新节点2插入的时候,以6为根节点的子树为最小失衡树,新节点2插在6节点的左子树的左子树上,现在对根节点右旋恢复平衡。

  • 根节点的左孩子代替根节点的位置
    在这里插入图片描述

  • 根节点的左子树的右子树变为根节点左子树
    在这里插入图片描述

  • 原来根节点及其新生成的子树 ,变为,原来根节点左子树的右子树,新的二叉平衡树生成。
    在这里插入图片描述
    2,右孩+右孩—>左旋
    在这里插入图片描述
    当新节点5插入的时候,以2为根节点的子树为最小失衡树,新节点6插在2节点的右子树的右子树上,现在对根节点左旋恢复平衡。

  • 根节点的右子树代替根节点位置
    在这里插入图片描述

  • 根节点的右子树的左子树变为根节点的右子树
    在这里插入图片描述

  • 原来根节点及其新生成的子树 ,变为,原来根节点左子树的右子树,新的二叉平衡树生成。
    在这里插入图片描述
    3,左孩+右孩—>左孩左旋+根节点右旋
    在这里插入图片描述

新节点5的插入造成原来的二叉树失衡,由于新节点是插在根节点的左孩子的右孩子上,需要进行两次旋转才能恢复平衡。

  • 根节点左孩子左旋
    在这里插入图片描述
  • 根节点右旋
    在这里插入图片描述
    4,右孩+左孩—>右孩右旋+根节点左旋
    在这里插入图片描述

新节点4的插入造成原来的二叉树失衡,由于新节点是插在根节点的右孩子的左孩子上,需要进行两次旋转才能恢复平衡。

  • 根节点右孩子右旋
    在这里插入图片描述
  • 根节点左旋
    在这里插入图片描述
    <6>哈夫曼树

压缩算法之哈夫曼数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值