【数据结构】满二叉树与完全二叉树

154 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第29天,点击查看活动详情 >>

满二叉树

满二叉树是指二叉树除了叶子节点每个节点的度都为2,则此树被称为满二叉树(直观理解满二叉树就是最下面一层挂满节点

性质

  • 满二叉树中第 i 层的节点数为 2的n-1次方个。
  • 深度为 k 的满二叉树必有 2的k次方-1 个节点 ,叶子数为 2的k-1次方。
  • 满二叉树中不存在度为 1 的节点,每一个分支点中都两棵深度相同的子树,且叶子节点都在最底层。
  • 具有 n 个节点的满二叉树的深度为 log2(n+1)。

完全二叉树

完全二叉树条件:

  • 除去最后一层节点为满二叉树
  • 最后一层节点从左到右依次分布

注意:最后一层节点必须从左到右依次分布,否则是不能作为完全二叉树的。

二叉树的存储结构

二叉树的存储被分为顺序存储与链式存储。

二叉树的顺序存储结构:

二叉树的顺序存储只能适用于完全二叉树,如果需要存储普通的二叉树则我们需要将它转化为完全二叉树

  • 注意:满二叉树也是完全二叉树的一种,因为满二叉树的条件是完全二叉树的子集
  • 如果我们存储普通的二叉树实际也很简单,我们只需要将缺省的节点填充0即可

存储方式:

我们完成转化后,即可从树的根节点开始按照层次依次将树中的节点存储在数组中即可

比如这个树

image.png

存储到数组中就成了这样

image.png

这就是满二叉树的存储过程,这样存储当需要还原的时候我们可以从数组中取出依次进行赋值还原成为一颗完全二叉树。

二叉树的链式存储结构

上面的顺序存储方式其实并不适用于所有二叉树的存储,也会造成一定的空间浪费情况,而链式存储就很好的避免了这种情况的出现

在链式存储中,一个节点由三部分组成

  • 指向左孩子的指针
  • 指向右孩子的指针
  • 数据域

当然不仅限于这一种方式去实现,我们还可以新增指针域指向父节点,这样能更方便我们查找父节点。