数据结构之二叉树的定义和性质
通过上一节讲解,我们知道通用树结构是采用双亲孩子表示法模型建立的。每个结点都有一个指向其双亲的指针,每个结点都有
若干个指向其孩子的指针。如下图:
整体实现起来比较复杂,今天我们来讲一下另一种树结构模型:孩子兄弟表示法模型。每个结点都有一个指向其第一个孩子的指
针,每个结点都有一个指向其第一个右兄弟的指针。如下图:
孩子兄弟表示法:每个结点包含一个数据指针和两个结点指针。
1. 数据指针:指向保存于树中的数据;
2. 孩子结点指针:指向第一个孩子;
3. 兄弟结点指针:指向第一个右兄弟。
如下图:
孩子兄弟表示法的特点:
1.能够表示任意的树形结构;
2. 每个结点中有且仅有三个指针域,数据指针,孩子结点指针,兄弟结点指针;
3. 每个结点的结构简单,只有孩子结点指针和兄弟结点指针构成了“树杈”。
孩子兄弟表示法的本质是将通用树转化为二叉树,二叉树是最多只有两个孩子的树。
二叉树的定义:二叉树是由 n ( n ≥0 ) 个结点组成的有限集合,该集合或者为空,或者是由一个根结点加上两棵分别称为左子树
和右子树的、互不相交的二叉树组成。
二叉树有如下不同的5中状态:空二叉树、仅有根结点的二叉树、右子树为空的二叉树、左子树为空的二叉树以及左、右子树均
非空的二叉树。如下图:
当然二叉树还有比较特殊的二叉树,比如满二叉树和完全二叉树。
满二叉树 (FullBinary Tree):如果二叉树中所有分支结点的度数都为2,且叶子结点都在同一层次上(即一颗深度为k且有2k-1个
结点的二叉树),则称这类二叉树为满二叉树。满二叉树的特点就是每一层的结点数都是最大节点数。
完全二叉树(Complete Binary Tree):如果一棵具有n个结点的高度为k的二叉树,它的每一个结点都与高度为k的满二叉树中编
号为1—n的结点一一对应,则称这棵二叉树为完全二叉树。(从上到下从左到右编号)。
完全二叉树的叶结点仅出现在最下面两层:
1.最下层的叶结点一定出现在左边;
2.倒数第二层的叶结点一定出现在右边。
完全二叉树中度为1的结点只有左孩子,同样结点数的二叉树,完全二叉树的高度最小。
上面我们总结了二叉树的定义,接下来我们说一说二叉树的性质。
二叉树的深层性质:
性质1: 在二叉树的第 i层最多有 2i-1个结点(i ≥ 1)。
• 第一层最多有 21-1=1个结点。
• 第二层最多有 22-1=2个结点。
• 第三层最多有 23-1=4个结点。
• ……
性质2: 深度为 k的二叉树最多有 2k-1个结点(k ≥ 0)。
• 如果有一层,最多有 1=21-1=1个结点。
• 如果有两层,最多有 1+2=22-1=3 个结点。
• 如果有三层,最多有 1+2+4=23-1=7 个结点。
• ……
性质3:对任何一棵二叉树,如果其叶结点有n0个,度为2的非叶结点有 n2个,则有 n0=n2+1。
证明:假设二叉树中度1的结点有 n1个且总结点为n个,则:n=n0+n1+n2。
假设二叉树中连接父结点与子结点间的边为 e条,则:e=n1+2n2 = n – 1。
所以:n0=n2+1。
性质4:具有 n个结点的完全二叉树的高度为
数据结构之二叉树的定义和性质相关推荐
- 数据结构之树和二叉树的定义和性质
树和二叉树的定义和性质 树 思维导图: 树的基本定义: 树的基本术语: 树的性质: 二叉树: 二叉树的定义: 二叉树的5中形态: 二叉树的几种特殊形态: 满二叉树: 完全二叉树: 二叉排序树: 平衡二 ...
- 【数据结构笔记09】二叉树的定义、性质、实现
本次笔记内容: 3.2.1 二叉树的定义及性质 3.2.2 二叉树的存储结构 文章目录 二叉树的定义及性质 二叉树的定义 二叉树的重要性质 二叉树的抽象数据类型定义 二叉树的存储结构 完全二叉树用数组 ...
- 二叉树的定义、性质、存储
二叉树的定义 二叉树是每个节点最多有两个子树的树结构.通常子树被称作"左子树"(left subtree)和"右子树"(right subtree).二叉树常被 ...
- 6.2 二叉树的定义、性质与存储结构
0. 引子 1. 二叉树的定义 2. 二叉树的性质 3. 二叉树的存储结构 (1) 树的表示法 通常,像树.图.栈.队列等数据结构下数据的存储表示,都是基于线性表.线性表有两种结构:[顺序存储结构和链 ...
- java数据结构之二叉树的定义和递归实现
定义 最多有两棵子树的有序树,称为二叉树.二叉树是一种特殊的树. 递归定义:二叉树是n(n>=0)个有限结点构成的集合.N=0称为空二叉树:n>0的二叉树由一个根结点和两互不相交的,分别称 ...
- c++用二叉树表示代数表达式_C语言:数据结构-二叉树的定义和基本术语和二叉树的性质...
二叉树的定义和基本术语 (1)二叉树的定义 二叉树(Binary Tree):每个结点至多有两棵子树,且子树有左.右之分.在二叉树中不含度数大于2的结点. 二叉树的递归定义为:二叉树或者是一棵空树,或 ...
- 【数据结构之二叉树】——二叉树的概念及结构,特殊的二叉树和二叉树性质
文章目录 一.二叉树的概念及结构 1.概念 2.现实中的二叉树 3. 特殊的二叉树: 3.二叉树的性质 二.二叉树练习题 总结 一.二叉树的概念及结构 1.概念 一棵二叉树是结点的一个有限集合,该集合 ...
- 二叉树的定义 性质 及存储结构
二叉树的定义和基本术语 二叉树是n个数据元素的有限集,它或为空集(n=0),或者含有唯一的称为根的元素,且其余元素分别分成两个互不相交的子集,每个子集自身也是一颗二叉树,分别称为根的左子树和右子树.集 ...
- 常见二叉树定义及其性质
二叉树种类名称定义: 完全二叉树 若设二叉树的深度为k,除第 k 层外,其它各层 (1-k-1) 的结点数都达到最大个数,第 k 层所有的结点都连续集中在最左边,这就是完全二叉树. 节点数最多是2^k ...
最新文章
- Windows客户端C/C++编程规范“建议”——结构
- 郁闷的Alexa破10万。
- List集合add使用过程中出现的错误
- Python 标准库 —— zipfile(读取 zip 文件)
- Mule与Servicemix比较
- mysql-8.0.14-winx64,mysql-8.0.15-winx64 解压版安装教程及退出的三种方式
- epoll背后的原理
- Web安全CSRF攻击与防御
- eclipselink_Java EE 7的高峰– EclipseLink的多租户示例
- 微信小程序下拉刷新列表onPullDownRefresh;微信小程序上划加载列表onReachBottom;uni-app微信小程序下拉加载数据;uni-app微信小程序上划页面加载数据
- Node.js之HTTP模块学习
- 动态规划入门——斐波那契数(Leetcode 509)
- qt布局调用自定义函数_QT 自定义函数 自定义信号和槽
- Angular 4.x 自定义表单控件
- Oracle与MySQL的几点区别
- 程序员过了 35 岁还能干嘛?这是我听过最棒的建议!
- php exec 命令,概述PHP命令行shell_exec()使用
- 银行数据仓库体系实践_【实战剖析】某国际性商业银行的数据仓库建设经验分享...
- 软件开发测试的5个部分
- 选择SaaS供应商的15个关键问题
热门文章
- php自动打印小票_服装店专用小票机自带进销存
- java守护线程与用户线程_详解Java线程-守护线程与用户线程
- Flink java作为消费者连接虚拟机中的kafka/或本地的kafka,并解决java.net.UnknownHostException报错
- python用代码执行另一个python文件
- Bash脚本删除相对路径下小于指定大小的文件
- oracle 客户端连接数_转载:查看Oracle连接数
- oracle 游标的替代,Oracle中replace函数和translate函数以及简单的游标
- java arraylist add时默认调用tostring_Java基础知识之ArrayList知识点总结
- InfluxDB-Python 操作实践
- block,inline和inlinke-block细节对比