【数据结构】完美二叉树, 完全二叉树和完满二叉树

一文带你详解完全二叉树(超详细) 完全二叉树是一种特殊类型的二叉树,其中树的所有级别都被完全填充,除了最低级别的节点从尽可能左侧填充之外。完全二叉树是一种特殊类型的二叉树,其中树的所有级别都被完全填充,除了最低级别的节点尽可能左侧填充之外。 阅读详情

完美二叉树, 完全二叉树和完满二叉树

本文出处:http://www.cnblogs.com/idorax/p/6441043.html

树在数据结构中占有非常重要的地位。本文从树的基本概念入手,给出完美(Perfect)二叉树,完全(Complete)二叉树和完满(Full)二叉树的区别。如果学习过二叉树,但是对这三种二叉树并没有深入的理解,或者完全被国产数据结构教科书所误导(只听说过满二叉树和完全二叉树)的朋友不妨花点时间耐着性子将本文仔细阅读N(>=1)遍。

1. 树(Tree)的基本概念

1.1 树的定义

A tree is a (possibly non-linear) data structure made up of nodes or vertices 
and edges without having any cycle. The tree with no nodes is called the null 
or empty tree. A tree that is not empty consists of a root node and potentially 
many levels of additional nodes that form a hierarchy.

树是由结点或顶点和边组成的(可能是非线性的)且不存在着任何环的一种数据结构。没有结点的树称为空(null或empty)树。一棵非空的树包括一个根结点,还(很可能)有多个附加结点,所有结点构成一个多级分层结构。

[注:本文将node一律译为”结点”(而不是”节点”),因为joint或connection是节点,而node是结点。关于”结点”与”节点”请自行搜索浙江大学陈水福教授的文章–“360度”解读如何正确应用”结点”与”节点”]

例如: 【图片来源: https://upload.wikimedia.org/wikipedia/commons/f/f7/Binary_tree.svg】

img

A simple unordered tree; in this diagram, the node labeled 7 has two children, 
labeled 2 and 6, and one parent, labeled 2. The root node, at the top, 
has no parent. 上图是一棵无序的树示例。在上图中,标号为7的结点有两个孩子,分别是标号为2和6的结点。
根结点,在最顶端,它没有双亲。
  • 1.2 树的基本术语
RootThe top node in a tree.根树的顶端结点
ChildA node directly connected to another node when moving away from the Root.孩子当远离根(Root)的时候,直接连接到另外一个结点的结点被称之为孩子(Child);
ParentThe converse notion of a child.双亲相应地,另外一个结点称为孩子(child)的双亲(parent)。
SiblingsA group of nodes with the same parent.兄弟具有同一个双亲(Parent)的孩子(Child)之间互称为兄弟(Sibling)。
AncestorA node reachable by repeated proceeding from child to parent.祖先结点的祖先(Ancestor)是从根(Root)到该结点所经分支(Branch)上的所有结点。
DescendantA node reachable by repeated proceeding from parent to child.子孙反之,以某结点为根的子树中的任一结点都称为该结点的子孙(Ancestor)。
LeafA node with no children.叶子(终端结点)没有孩子的结点(也就是度为0的结点)称为叶子(Leaf)或终端结点。
BranchA node with at least one child.分支(非终端结点)至少有一个孩子的结点称为分支(Branch)或非终端结点。
DegreeThe number of sub trees of a node.度结点所拥有的子树个数称为结点的度(Degree)。
EdgeThe connection between one node and another.边一个结点和另一个结点之间的连接被称之为边(Edge)。
PathA sequence of nodes and edges connecting a node with a descendant.路径连接结点和其后代的结点之间的(结点,边)的序列。
LevelThe level of a node is defined by 0 + (the number of connections between the node and the root).层次结点的层次(Level)从根(Root)开始定义起,根为第0层,根的孩子为第1层。以此类推,若某结点在第i层,那么其子树的根就在第i+1层。
Height of nodeThe height of a node is the number of edges on the longest path between that node and a leaf.结点的高度结点的高度是该结点和某个叶子之间存在的最长路径上的边的个数。
Height of treeThe height of a tree is the height of its root node.树的高度树的高度是其根结点的高度。
Depth of nodeThe depth of a node is the number of edges from the tree’s root node to the node.结点的深度结点的深度是从树的根结点到该结点的边的个数。 (注:树的深度指的是树中结点的最大层次。)
ForestA forest is a set of n ≥ 0 disjoint trees.森林森林是n(>=0)棵互不相交的树的集合。

2 二叉树(Binary Tree)

2.1 什么是二叉树(Binary Tree)

每个结点至多拥有两棵子树(即二叉树中不存在度大于2的结点),并且,二叉树的子树有左右之分,其次序不能任意颠倒。

2.2 二叉树的性质

(1)若二叉树的层次从0开始,则在二叉树的第i层至多有2^i个结点(i>=0)。

(2)高度为k的二叉树最多有2^(k+1) - 1个结点(k>=-1)。 (空树的高度为-1)

(3)对任何一棵二叉树,如果其叶子结点(度为0)数为m, 度为2的结点数为n, 则m = n + 1。

2.3 完美二叉树(Perfect Binary Tree)

A Perfect Binary Tree(PBT) is a tree with all leaf nodes at the same depth. 
All internal nodes have degree 2.

一个深度为k(>=-1)且有2^(k+1) - 1个结点的二叉树称为完美二叉树。 (注: 国内的数据结构教材大多翻译为”满二叉树”)

例如:

img

2.4 完全二叉树(Complete Binary Tree)

A Complete Binary Tree (CBT) is a binary tree in which every level, 
except possibly the last, is completely filled, and all nodes 
are as far left as possible.

换句话说,完全二叉树从根结点到倒数第二层满足完美二叉树,最后一层可以不完全填充,其叶子结点都靠左对齐。

例如:

img

2.5 完满二叉树(Full Binary Tree)

A Full Binary Tree (FBT) is a tree in which every node other than the leaves has two children.

换句话说,所有非叶子结点的度都是2。(只要你有孩子,你就必然是有两个孩子。)

**注:**Full Binary Tree又叫做Strictly Binary Tree。

例如:

img

2.6 完美(Perfect)二叉树 v.s. 完全(Complete)二叉树

(1) 一棵完美(Perfect)二叉树看起来是这个样儿的, 【图2.6.1】

img

(2) 那么,将编号为15, 14, …, 9的叶子结点从右到左依次拿掉或者拿掉部分,则是一棵完全(Complete)二叉树,

例如,将上图中的编号为15, 14, 13, 12, 11叶子结点都拿掉(从右到左的顺序), 【图2.6.2】

img

(3) 下图就不是一棵完全(Complete)二叉树,【图2.6.3】,

如果将编号11(K)结点从编号6(E)的左儿子位置移动到编号5(E)的右儿子位置,则变成一棵完全(Complete)二叉树。

img

注: 图2.6.1, 2.6.2和2.6.3均来自:http://alrightchiu.github.io/SecondRound/binary-tree-introjian-jie.html, 但是,其将Full Binary Tree当做就是Perfect Binary Tree, 我认为是不正确的,特此说明。

特别说明: 其实,理解完全(Complete)二叉树可以借助于栈(stack)的思想。 例如,把图2.6.1中的完美(Perfect)二叉树的所有结点按照编号1, 2, 3, …, 15依次入栈(push)。 那么,对栈的每一次出栈(pop)操作后,栈里保存的结点集对应到图2.6.1上去都是一棵完全(Complete)二叉树。

2.7 完全(Complete)二叉树 v.s. 完满(Full)二叉树

【截图来源:http://courses.cs.vt.edu/~cs3114/Fall09/wmcquain/Notes/T03a.BinaryTreeTheorems.pdf】

img

2.8 完满(Full)二叉树 v.s. 完全(Complete)二叉树 v.s. 完美(Perfect)二叉树

【图片来源: http://www.csie.ntnu.edu.tw/~u91029/BinaryTree2.png】

img

3. 总结 (下表参考来源)

完美二叉树Perfect Binary TreeEvery node except the leaf nodes have two children and every level (last level too) is completely filled. 除了叶子结点之外的每一个结点都有两个孩子,每一层(当然包含最后一层)都被完全填充。
完全二叉树Complete Binary TreeEvery level except the last level is completely filled and all the nodes are left justified. 除了最后一层之外的其他每一层都被完全填充,并且所有结点都保持向左对齐。
完满二叉树Full/Strictly Binary TreeEvery node except the leaf nodes have two children. 除了叶子结点之外的每一个结点都有两个孩子结点。

- 完美(Perfect)二叉树一定是完全(Complete)二叉树,但完全(Complete)二叉树不一定是完美(Perfect)二叉树。 
- 完美(Perfect)二叉树一定是完满(Full)二叉树,但完满(Full)二叉树不一定是完美(Perfect)二叉树。 
- 完全(Complete)二叉树可能是完满(Full)二叉树,完满(Full)二叉树也可能是完全(Complete)二叉树。 
- 既是完全(Complete)二叉树又是完满(Full)二叉树也不一定就是完美(Perfect)二叉树。

完美二叉树, 完全二叉树和完满二叉树 完美二叉树、完全二叉树和完满二叉树 完美(Perfect)二叉树,完全(Complete)二叉树和完满(Full)二叉树的区别。 树(Tree) 树是由结点或顶点和边组成的(可能是非线性的)且不存在着任何环的一种数据结构。没有结点的树称为空(null或empty)树。一棵非空的树包括一个根结点,还(很可能)有多个附加结点,所有结点构成一个多级分层结构。 树的基本术语 Root 根,树的顶端结点 Child 孩子,当远离根(Root)的时候,直接连接到另外一个结点的结点被称之为孩子(Child); Pare 阅读详情

相关推荐

完全二叉树的种类

构造n个(2<=n<=20)叶结点的的完全二叉树(完全二叉树意味着每个分支结点都有2个儿子结点),有多少种构造方法? 注意:不改变n个结点的相对顺序,左右儿子不调换. 例如: 4个叶子节点A1,A2,A3,A4,可构造出如下完全二叉树,共5种。 再例如:5个叶子结点,A1,A2,A3,A4,A5,可构造出如下若干种完全二叉树形状,像这样的完全二叉树共有14种(下图并未全部列出).

数据结构习题集(错题集)

深度为k具有n个结点的完全二叉树,其编号最小的叶结点序号为[2k-2]+1()× 对 错 正确答案是[n/2]+1。因为叶子结点可能出现在最后两层,最小编号的叶子结点为最大编号为n的叶子结点的父结点右边那个结点 分析:两种情况,有可能叶子节点只有1层;则2k-2]+1 叶子节点有2层:[n/2]+1

程序狗的成长之路 9307

用python将dycom .dcm格式图像转换为nifti .nii

因为发现目前搜索到的多数中文教程并不能正确将FMRI图像正确转换,例如很多用simpleITk的seriesreader的,所以写了一下自己正确转换的方法。因为FMRI是一个4D数据,有时间轴,所以用seriesreader读写出来的图像把时间轴维度给降维了。当然你用SPM12工具的dycom import也是能正确转换的,但是我还是喜欢python这样的,代码直接简单。

qq_41103479的博客 3609

二叉树转化为完全二叉树

题意就是将普通的二叉树转化为完全二叉树。该二叉树用链接存储,完全二叉树用顺序存储。想法就是把空结点分配空间并其数据域赋为‘#’;指针域为空。层序遍历该二叉树 参考代码: #include using namespace std; struct BiNode { char data; BiNode *lchild,*rchild; }; char a[200]; int fl

No_Retreats的专栏 4526

HC32F460 FPU实战:从零开启硬件浮点加速

本文详细介绍了如何在HC32F460开发板上启用和优化FPU(浮点运算单元),以显著提升硬件浮点运算性能。从工程配置、关键代码修改到实战优化技巧,全面解析FPU加速的实现方法,并分享常见问题的解决方案,帮助开发者避免常见陷阱,充分发挥HC32F460的硬件潜力。

weixin_42620340的博客 349

CANoe_Demo_下载以及安装教程

CANoe Demo下载安装流程

Jar_Lee的博客 1万+

数据结构之完全二叉树

一、完全二叉树定义 完全二叉树(Complete Binary Tree) 若设二叉树的深度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h 层所有的结点都连续集中在最左边,这就是完全二叉树。 完全二叉树是由满二叉树而引出来的。对于深度为K的,有n个结点的二叉树,当且仅当其每一个结点都与深度为K的满二叉树中编号从1至n的结点一一对应时称之为完全二叉树。 一棵二叉树至多只有最下面的一层上的结点的度数可以小于2,并且最下层上的结点都集中在该层最左边的若干位置上,而在最后一层上,右边

weixin_45984250的博客 12万+

239号资源-simulink仿真:MATLAB/Simulink教程(PDF文档)-----已提供下载资源

电网论文源程序擅长文章解读,论文与完整源程序,等方面的知识,电网论文源程序关注python,机器学习,计算机视觉,深度学习,神经网络,数据挖掘领域.电网论文源程序擅长文章解读,论文与完整源程序,等方面的知识,电网论文源程序关注python,机器学习,计算机视觉,深度学习,神经网络,数据挖掘领域.《《《《《《《《更多资源还请持续关注本专栏》》》》》》》《《《《《《《《更多资源还请持续关注本专栏》》》》》》》论文与完整源程序_电网论文源程序的博客-优快云博客。电网论文源程序-优快云博客。

LIANG674027206的博客 1076

【数据结构】完全二叉树——啊堆堆堆

则称为小堆(或大堆)(通俗来讲,完全二叉树其实就是一颗高度为N的树,它的前N-1层都是满的,而第N层从左到右是连续的)。有了向上调整算法后,现在我们又多了一种建堆方法,向上调整算法,我们可以把给定数组当作一个从0个元素开始逐渐向堆中插入数据的堆,也就是我们可以从根节点的第一个孩子节点开始,然后向上调整,直至将整个数组调整成一个堆?现实中我们通常把堆(一种二叉树)使用顺序结构的数组来存储,需要注意的是这里的堆和操作系统虚拟进程地址空间中的堆是两回事,一个是数据结构,一个是操作系统中管理内存的一块区域分段。

m0_74459723的博客 1311

OPPO 数据分析面试题及参考答案

如何设计共享单车数据库的各个字段? 对于共享单车的数据库设计,首先考虑用户相关的字段。用户表可以包含用户 ID,这是一个唯一标识符,用于区分不同用户;姓名,记录用户的真实姓名;联系方式,比如手机号码,方便在出现问题时联系用户;注册时间,记录用户何时开始使用共享单车服务;信用分数,用于衡量用户使用共享单车过程中的行为是否合规,比如是否按时归还车辆等。 车辆信息表要有车辆 ID,这是车辆的唯一标识;车辆类型,例如普通单车、电动单车等;投放时间,即车辆投放到市场的时间;车辆状态,包括是否可用(如正

大模型大数据攻城狮的专栏 1186

论文必备 - YOLOv11热力图可视化,支持指定模型,指定显示层,设置置信度,以及10种可视化实现方式

本文带来的是YOLOv11热力图可视化功能,支持,以及。我们经常看到一些论文里绘制了不同的热力图,一方面能够直观的感受其模型的有效性,另一方面也丰富了论文内容。特别是在使用了注意力模块的网络中,热力图就可以验证注意力机制是否真正聚焦到了预期的重要特征上,以便对模型的有效性和合理性进行评估。例如这篇文章中展示的,就很能够表达作者改进后的模型相比之前模型的优越性。

Limiiiing的博客 5505

完全二叉树,完美二叉树和完满二叉树

二叉树(Binary Tree) 什么是二叉树(Binary Tree) 每个结点至多拥有两棵子树(即二叉树中不存在度大于2的结点),并且,二叉树的子树有左右之分,其次序不能任意颠倒。 二叉树的性质 (1)若二叉树的层次从0开始,则在二叉树的第i层至多有2^i个结点(i>=0)。 (2)高度为k的二叉树最多有2^(k+1) - 1个结点(k>=-1)。 (空树的高度为-1)...

hanzhen7541的博客 3059

运动控制软件:Siemens Sinamics二次开发_(6).通信接口与协议详解

PROFIBUSPROFINETModbus TCPCANopenEtherCAT每种通信接口都有其特定的应用场景和优势。选择合适的通信接口可以显著提高系统的性能和可靠性。在选择通信协议时,需要根据具体的应用场景和需求综合考虑。每种通信协议都有其特定的优势和局限性,因此在设计运动控制系统时,应选择最适合的协议,以确保系统的性能、可靠性、成本和维护性。通过以上对比和分析,希望开发者能够更好地理解和选择适合的通信接口和协议,从而优化运动控制系统的开发和应用。

2401_87715305的博客 901

完满(Full)二叉树,完全(Complete)二叉树, 完美(Perfect)二叉树

完美二叉树 Perfect Binary Tree Every node except the leaf nodes have two children and every level (last level too) is completely filled. 除了叶子结点之外的每一个结点都有两个孩子,每一层(当然包含最后一层)都被完全填充。 完全二叉树 Complete...

mudooo的博客 5707

Livox激光雷达传感器在Python3中的完整驱动程序:深入剖析OpenPyLivox库的实现和应用

当我们提到激光雷达或激光扫描技术时,Livox激光雷达传感器无疑是业界的佼佼者。尽管Livox提供了基于C++的官方软件和API,但现在,有了OpenPyLivox (OPL) 库,Python开发者们也能够轻松地接入和控制这些高级的激光雷达设备。

qq_38334677的博客 1002

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

树-二叉树-perfect complete full-完美 完全 完满

完美二叉树:perfect 每一个父节点都有两个child,第i层有2^(i-1)个子节点 完全二叉树 complete 除最后一层外,其余为完美二叉树 最后一层的节点靠左对齐 完满二叉树 full 满是指每一个父节点的子节点都是全的,既:每个父节点都有两个子节点 ...

weixin_39087379的博客 256

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

高度为k的完全二叉树至少有 个叶子结点。_数据结构与算法-二叉树性质

链表通常可以提供比数组更大的灵活性,但是由于链表是线性结构,所以很难使用它们来组织对象的分层结构。虽然栈和队列反映了某些层次,但它们是一维的。为了避免这种限制,我们来探究一种新的数据结构,称为树,树由节点和弧组成。就像这样:图1-1与自然界的树不同,数据结构中的树是倒过来的:根在顶部,叶子(末端节点)在底部。根是一个没有父节点只有子节点的节点,而叶节点没有子节点或者子节点是空结构。一颗树中非叶子节...

weixin_39744384的博客 4664

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

​​​【收录 Hello 算法】7.1 二叉树

如图 7-1 所示,如果将“节点 2”视为父节点,则其左子节点和右子节点分别是“节点 4”和“节点 5”,左子树是“节点 4 及其以下节点形成的树”,右子树是“节点 5 及其以下节点形成的树”。所有层的节点都被完全填满。与链表类似,二叉树的基本单元是节点,每个节点包含值、左子节点引用和右子节点引用。请注意,我们通常将“高度”和“深度”定义为“经过的边的数量”,但有些题目或教材可能会将其定义为“经过的节点的数量”。当给定一个二叉树的节点时,我们将该节点的左子节点及其以下节点形成的树称为该节点的。

让学习成为一种习惯 734

面试常考的树,我这样讲给你听!

我们今天先来看,什么是“树”。 树是由顶点和边组成的且不存在环的数据结构。作为一个应用非常广的数据结构,不仅在工作中常用,在面试中也非常常考。 一是因为树的结构天然决定了它和递归联系紧密,很多树相关的算法题都非常适合用递归来解; 二是因为它的难度介于链表和图之间,非常适合在 45 分钟的面试里进行考察,所以一场面试中遇到两三轮问树都是再正常不过的了。 本文先来讲树的基础内容,分为以下小节,每个小节开头都会有思维导图和对应的Leetcode算法题哟~ 简介 金融里的二叉树 .

勇往直前的专栏 721

树,完美二叉树, 完全二叉树和完满二叉树

树在数据结构中占有非常重要的地位。本文从树的基本概念入手,给出完美(Perfect)二叉树,完全(Complete)二叉树和完满(Full)二叉树的区别。可能会有错误,希望大家多多指正。 1. 树(Tree)的基本概念 1.1 树的定义 树是由结点或顶点和边组成的(可能是非线性的)且不存在着任何环的一种数据结构。没有结点的树称为空(null或empty)树。一棵非空的树包括一个根结点,还(很可能)...

Gary的博客 2669

完美二叉树、完全二叉树、完满二叉树

1、二叉树(Binary Tree) 1.1 什么是二叉树(Binary Tree) 每个结点至多拥有两棵子树(即二叉树中不存在度大于2的结点),并且,二叉树的子树有左右之分,其次序不能任意颠倒。 1.2 二叉树的性质 若二叉树的层次从0开始,则在二叉树的第i层至多有2^i个结点(i&amp;amp;amp;gt;=0)。 高度为k的二叉树最多有2^(k+1) - 1个结点(k&amp;amp;amp;gt;=-1)。 (空树的高...

pg的博客 2万+

判断一棵树是否为完全二叉树的算法c语言,判断是否为完全二叉树

什么是二叉树(Binary Tree)每个结点至多拥有两棵子树(即二叉树中不存在度大于2的结点),并且,二叉树的子树有左右之分,其次序不能任意颠倒。二叉树包含三种特殊的二叉树,完全二叉树、完满二叉树和完美二叉树。首先带大家了解一下完全二叉树、完满二叉树、完美二叉树定义和的区别。完全二叉树定义(Complete Binary Tree):若设二叉树的深度为h,除第 h 层外,其它各层 (1~h-1)...

weixin_39552304的博客 3854

搬:完美二叉树, 完全二叉树和完满二叉树

完美二叉树, 完全二叉树和完满二叉树 树在数据结构中占有非常重要的地位。本文从树的基本概念入手,给出完美(Perfect)二叉树,完全(Complete)二叉树和完满(Full)二叉树的区别。如果学习过二叉树,但是对这三种二叉树并没有深入的理解,或者完全被国产数据结构教科书所误导(只听说过满二叉树和完全二叉树)的朋友不妨花点时间耐着性子将本文仔细阅读N(>=1)遍。 1. 树(Tree)...

hunter 264

一文理解完美二叉树, 完全二叉树和完满二叉树

转 完美二叉树, 完全二叉树和完满二叉树 2017年09月22日 17:19:47 小辣抓 阅读数:10663更多 <div class="tags-box space"> <span cla...

标签:Python | 算法 | 人工智能 | 编程实战 | 技术深挖 核心领域: 编程语言:Python/Java/C++ 实战技巧与底层实现解析 算法与数据结构:高频面试题优化解、竞赛算法模板、代码效率优化 人工智能:机器学习模型推导、 4641
上一篇: 【CS231n】cs231斯坦福大学计算机视觉课程笔记翻译--学习(转载)
下一篇: 【数据结构】(树总结)二叉树搜索/查找树
HelloZEX
博客等级 码龄11年 486粉丝 264原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值