📜  完整的二叉树(1)

📅  最后修改于: 2023-12-03 14:53:35.243000             🧑  作者: Mango

完整的二叉树

简介

完整的二叉树(Full Binary Tree)指的是所有非叶子节点都有两个子节点的二叉树。具有n个节点的完整二叉树的每一层都有2^(n-1)个节点,其高度为log2(n+1)。完整二叉树是一种高度平衡的二叉树,因此可以保证查找操作的时间复杂度为O(logn)。

特征

完整二叉树具有以下特征:

  1. 所有非叶子节点都有两个子节点。
  2. 每一层的节点数都是满的,即每层都有2^(n-1)个节点。(n为该层的高度,第一层高度为1)

例如:

完整二叉树

这是一个完整的二叉树,其中5和6节点没有子节点。

实现

完整二叉树通常使用数组来实现,可以用以下公式来计算每个节点的父节点、左子节点、右子节点在数组中的下标位置。

  1. 父节点:parent(i) = i/2 (向下取整)
  2. 左子节点:left(i) = 2*i
  3. 右子节点:right(i) = 2*i+1

例如,对于数组[1,2,3,4,5,6],其对应的完整二叉树如下所示:

    1
   / \
  2   3
 / \ 
4   5

其中:

  • 节点1的左子节点为2,右子节点为3,父节点为0(因为数组下标从0开始)
  • 节点2的左子节点为4,右子节点为5,父节点为0
  • 节点3没有左右子节点,父节点为1
  • 节点4、5没有左右子节点,父节点为2
应用

完整二叉树常用于堆(Heap)的实现中,堆是一种常见的数据结构。

堆的特点:

  1. 堆是完整的二叉树。
  2. 堆中每个节点的值都大于等于(或小于等于)其子节点的值,这种关系被称为“堆顺序”。

堆有两种类型: 最大堆和最小堆。在最大堆中,父节点的值大于等于子节点的值,在最小堆中,父节点的值小于等于子节点的值。堆可以用于排序、优先队列等场景中。

例如,以下是一个最大堆示例:

        8
      /   \
     7     6
    / \   / \
   5  4   3  2

在这个最大堆中,每个父节点的值都大于等于其子节点的值。

总结

完整二叉树是一种常见的高度平衡二叉树,有着非常广泛的应用,特别是在堆相关的场景中。使用数组实现可以方便地计算每个节点的父节点和子节点,加速各种操作的实现。