📜  完全二叉树

📅  最后修改于: 2022-05-13 01:58:10.997000             🧑  作者: Mango

完全二叉树

我们知道是一种非线性数据结构。它对孩子的数量没有限制。二叉树有一个限制,因为树的任何节点最多有两个孩子:一个左孩子和一个右孩子。

完全二叉树简介:

当所有级别都完全填充时,二叉树被称为完全二叉树,除了最低级别的节点尽可能从左侧填充。

完全二叉树

一些术语:

  • Root – 没有边来自父节点的节点。示例-节点 A
  • 节点——具有一些传入边的节点称为子节点。示例 – 节点 B、H 分别是 A 和 D 的子节点。
  • 兄弟姐妹——具有相同父节点的节点是兄弟节点。示例-J,K 是兄弟姐妹,因为它们具有相同的父 E。
  • 节点度数——特定父节点的子节点数。示例 - A 的度数为 2,H 的度数为 1。L 的度数为 0。
  • 内部/外部节点——叶节点是外部节点,非叶节点是内部节点。
  • 级别- 计算路径中到达目标节点的节点数。示例 - 节点 H 的级别为 3,因为节点 A、D 和 H 本身形成路径。
  • 高度- 到达目标节点的边数,根的高度为 0。示例 - 节点 E 的高度为 2,因为它从根有两条边。

完全二叉树的性质:

  • 完全二叉树被称为是所有叶子都具有相同深度的正确二叉树。
  • 在完全二叉树中,深度d处的节点数为2 d
  • 在具有n 个节点的完全二叉树中,树的高度为log(n+1)
  • 除了最后一个级别之外的所有级别都完全满了。

完美二叉树与完全二叉树:

具有最大节点数的高度为“h”的二叉树是完美二叉树。
对于给定的高度h ,最大节点数为2 h+1 -1

高度为 h 的完全二叉树是高度为h-1的正确二叉树,并且在最后一级元素中以从左到右的顺序存储。

示例 1:

二叉树

给定二叉树的高度为 2,该树中的最大节点数为 n= 2 h+1 -1 = 2 2+1 -1 = 2 3 -1 = 7
因此我们可以断定它是一棵完美的二叉树
现在对于一个完全二叉树,它是满到高度h-1即; 1,最后一级元素按从左到右的顺序存储。因此它也是一个完整的二叉树。这是存储在数组中时元素的表示

逐级存储在数组中的元素

在数组中,所有元素都是连续存储的。

示例 2:

二叉树

给定二叉树的高度为 2 并且应该存在的最大节点数为 2 h+1 – 1 = 2 2+1 – 1 = 2 3 – 1 = 7
但是树中的节点数是6 。因此它不是一个完美的二叉树
现在对于一个完全二叉树,它是满到高度h-1即; 1 ,最后一级元素按从左到右的顺序存储。因此这是一棵完全二叉树。将元素存储在一个数组中,它会像;

逐级存储在数组中的元素

示例 3:

二叉树

二叉树的高度为 2,最大节点数为 7,但只有 5 个节点,因此它不是完美的二叉树
在完全二叉树的情况下,我们看到在最后一层元素不是从左到右的顺序填充的。所以它不是一棵完全二叉树

逐级存储在数组中的元素

数组中的元素不连续。

完全二叉树与完全二叉树:

对于完整的二叉树,每个节点要么有 2 个孩子,要么有 0 个孩子。

示例 1:

二叉树

在给定的二叉树中,没有度数为 1 的节点,每个节点有 2 个或 0 个子节点,因此它是一个完整的二叉树

对于完整的二叉树,元素是逐层存储的,而不是从最后一层的最左边开始存储的。因此这不是一个完整的二叉树。数组表示为:

逐级存储在数组中的元素

示例 2:

二叉树

在给定的二叉树中,没有度数为 1 的节点。每个节点的度数为 2 或 0。因此,它是一棵完整的二叉树

对于完整的二叉树,元素是逐层存储的,从最后一层的最左边开始填充。因此这是一个完整的二叉树。下面是树的数组表示:

逐级存储在数组中的元素

示例 3:

二叉树

在给定的二叉树中,节点 B 的度数为 1,这违反了完全二叉树的属性,因此它不是完全二叉树

对于完整的二叉树,元素是逐层存储的,从最后一层的最左边开始填充。因此这是一棵完全二叉树。二叉树的数组表示为:

逐级存储在数组中的元素

示例 4:

二叉树

在给定的二叉树中,节点 C 的度数为 1,这违反了完整二叉树的属性,因此它不是完整二叉树

对于完整的二叉树,元素是逐层存储的,从最后一层的最左边开始填充。这里节点 E 违反了条件。因此这不是一个完整的二叉树

创建完全二叉树:

我们知道一棵完全二叉树是一棵树,其中除了最后一层(比如l )之外,所有其他层都有( 2l )个节点,并且节点从左到右排列。
它可以使用数组来表示。如果父母是它的索引i所以左孩子在2i+1 ,右孩子在2i+2

完全二叉树及其数组表示

算法:

为了创建完整的二叉树,我们需要一个队列数据结构来跟踪插入的节点。

步骤 1:当树为空时,用新节点初始化根。

步骤 2:如果树不为空,则获取最前面的元素

  • 如果前面的元素没有左孩子,则将左孩子设置为新节点
  • 如果右孩子不存在,则将右孩子设置为新节点

第 3 步:如果节点有两个孩子,则将其从队列中弹出

第 4 步:将新数据排入队列。

插图:

实现:本文给出了从级别顺序遍历构建完整二叉树的实现。

完全二叉树的应用:

  • 堆排序
  • 基于堆排序的数据结构

检查给定的二叉树是否完整:按照这篇文章检查给定的二叉树是否完整。