通过上一节讲解,我们知道通用树结构是采用双亲孩子表示法模型建立的。每个结点都有一个指向其双亲的指针,每个结点都有

若干个指向其孩子的指针。如下图:

整体实现起来比较复杂,今天我们来讲一下另一种树结构模型:孩子兄弟表示法模型。每个结点都有一个指向其第一个孩子的指

针,每个结点都有一个指向其第一个右兄弟的指针。如下图:

孩子兄弟表示法:每个结点包含一个数据指针和两个结点指针。

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个结点的完全二叉树的高度为

数据结构之二叉树的定义和性质相关推荐

  1. 数据结构之树和二叉树的定义和性质

    树和二叉树的定义和性质 树 思维导图: 树的基本定义: 树的基本术语: 树的性质: 二叉树: 二叉树的定义: 二叉树的5中形态: 二叉树的几种特殊形态: 满二叉树: 完全二叉树: 二叉排序树: 平衡二 ...

  2. 【数据结构笔记09】二叉树的定义、性质、实现

    本次笔记内容: 3.2.1 二叉树的定义及性质 3.2.2 二叉树的存储结构 文章目录 二叉树的定义及性质 二叉树的定义 二叉树的重要性质 二叉树的抽象数据类型定义 二叉树的存储结构 完全二叉树用数组 ...

  3. 二叉树的定义、性质、存储

    二叉树的定义 二叉树是每个节点最多有两个子树的树结构.通常子树被称作"左子树"(left subtree)和"右子树"(right subtree).二叉树常被 ...

  4. 6.2 二叉树的定义、性质与存储结构

    0. 引子 1. 二叉树的定义 2. 二叉树的性质 3. 二叉树的存储结构 (1) 树的表示法 通常,像树.图.栈.队列等数据结构下数据的存储表示,都是基于线性表.线性表有两种结构:[顺序存储结构和链 ...

  5. java数据结构之二叉树的定义和递归实现

    定义 最多有两棵子树的有序树,称为二叉树.二叉树是一种特殊的树. 递归定义:二叉树是n(n>=0)个有限结点构成的集合.N=0称为空二叉树:n>0的二叉树由一个根结点和两互不相交的,分别称 ...

  6. c++用二叉树表示代数表达式_C语言:数据结构-二叉树的定义和基本术语和二叉树的性质...

    二叉树的定义和基本术语 (1)二叉树的定义 二叉树(Binary Tree):每个结点至多有两棵子树,且子树有左.右之分.在二叉树中不含度数大于2的结点. 二叉树的递归定义为:二叉树或者是一棵空树,或 ...

  7. 【数据结构之二叉树】——二叉树的概念及结构,特殊的二叉树和二叉树性质

    文章目录 一.二叉树的概念及结构 1.概念 2.现实中的二叉树 3. 特殊的二叉树: 3.二叉树的性质 二.二叉树练习题 总结 一.二叉树的概念及结构 1.概念 一棵二叉树是结点的一个有限集合,该集合 ...

  8. 二叉树的定义 性质 及存储结构

    二叉树的定义和基本术语 二叉树是n个数据元素的有限集,它或为空集(n=0),或者含有唯一的称为根的元素,且其余元素分别分成两个互不相交的子集,每个子集自身也是一颗二叉树,分别称为根的左子树和右子树.集 ...

  9. 常见二叉树定义及其性质

    二叉树种类名称定义: 完全二叉树 若设二叉树的深度为k,除第 k 层外,其它各层 (1-k-1) 的结点数都达到最大个数,第 k 层所有的结点都连续集中在最左边,这就是完全二叉树. 节点数最多是2^k ...

最新文章

  1. Windows客户端C/C++编程规范“建议”——结构
  2. 郁闷的Alexa破10万。
  3. List集合add使用过程中出现的错误
  4. Python 标准库 —— zipfile(读取 zip 文件)
  5. Mule与Servicemix比较
  6. mysql-8.0.14-winx64,mysql-8.0.15-winx64 解压版安装教程及退出的三种方式
  7. epoll背后的原理
  8. Web安全CSRF攻击与防御
  9. eclipselink_Java EE 7的高峰– EclipseLink的多租户示例
  10. 微信小程序下拉刷新列表onPullDownRefresh;微信小程序上划加载列表onReachBottom;uni-app微信小程序下拉加载数据;uni-app微信小程序上划页面加载数据
  11. Node.js之HTTP模块学习
  12. 动态规划入门——斐波那契数(Leetcode 509)
  13. qt布局调用自定义函数_QT 自定义函数 自定义信号和槽
  14. Angular 4.x 自定义表单控件
  15. Oracle与MySQL的几点区别
  16. 程序员过了 35 岁还能干嘛?这是我听过最棒的建议!
  17. php exec 命令,概述PHP命令行shell_exec()使用
  18. 银行数据仓库体系实践_【实战剖析】某国际性商业银行的数据仓库建设经验分享...
  19. 软件开发测试的5个部分
  20. 选择SaaS供应商的15个关键问题

热门文章

  1. php自动打印小票_服装店专用小票机自带进销存
  2. java守护线程与用户线程_详解Java线程-守护线程与用户线程
  3. Flink java作为消费者连接虚拟机中的kafka/或本地的kafka,并解决java.net.UnknownHostException报错
  4. python用代码执行另一个python文件
  5. Bash脚本删除相对路径下小于指定大小的文件
  6. oracle 客户端连接数_转载:查看Oracle连接数
  7. oracle 游标的替代,Oracle中replace函数和translate函数以及简单的游标
  8. java arraylist add时默认调用tostring_Java基础知识之ArrayList知识点总结
  9. InfluxDB-Python 操作实践
  10. block,inline和inlinke-block细节对比