完全二叉树
我们知道树是一种非线性数据结构。它对孩子的数量没有限制。二叉树有一个限制,因为树的任何节点最多有两个孩子:一个左孩子和一个右孩子。
完全二叉树简介:
当所有级别都完全填充时,二叉树被称为完全二叉树,除了最低级别的节点尽可能从左侧填充。
一些术语:
- 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 步:将新数据排入队列。
插图:
Consider the below array:
1. The 1st element will the root (value at index = 0)
2. The next element (at index = 1) will be left and third element (index = 2) will be right child of root
3. fourth (index = 3) and fifth element (index = 4) will be the left and right child of B node
4. Next element (index = 5) will be left child of the node D
This is how complete binary tree is created.
实现:本文给出了从级别顺序遍历构建完整二叉树的实现。
完全二叉树的应用:
- 堆排序
- 基于堆排序的数据结构
检查给定的二叉树是否完整:按照这篇文章检查给定的二叉树是否完整。