二叉树的定义和基本术语

(1)二叉树的定义

二叉树(Binary Tree):每个结点至多有两棵子树,且子树有左、右之分。在二叉树中不含度数大于2的结点。

二叉树的递归定义为:二叉树或者是一棵空树,或者是一棵由一个根结点和两棵互不相交的分别称作根的左子树右子树所组成的非空树,左子树和右子树又同样都是一棵二叉树。

(2)二叉树的基本术语

如图6-4所示的一棵二叉树BT,它由根结点A和左子树BT1及右子树BT2所组成,BT1位于A结点的左下部,BT2位于A结点的右下部;BT1又由根结点B和左子树BT11(它只含有根结点D),右子树BT12(此为空树)所组成;对于BT2树也可进行类似的分析。

1.左孩子:结点的左子树的根。如在图6-4的二叉树BT中,A结点的左孩子为B结点,B结点的左孩子为D结点。

2.右孩子:结点的右子树的根。如在图6-4的二叉树BT中,A结点的右孩子为C结点;C结点的右孩子为F结点。

二叉树BT

3.满二叉树

在一棵二叉树中,当第i层的结点数为2i-1时,则称此层的结点数是满的,当树中的每一层都满时,则称此树为满二叉树。

图6-5(a)为一棵深度为4的满二叉树,其结点数为15。图中每个结点的值是用该结点的编号来表示的。对一般二叉树,其结点的顺序编号规则为:树根结点的编号为1,然后按照层数从小到大、同一层从左到右的次序对每个结点进行编号,若双亲结点的编号为i,则左、右孩子结点的编号分别为2i和2i+1。

满二叉树和完全二叉树

4.完全二叉树

在一棵二叉树中,除最后一层外,若其余层都是满的,并且最后一层或者是满的,或者是在最右边缺少连续若干个结点,则称此树为完全二叉树。

由此可知,满二叉树是完全二叉树的特例。图6-5(b)为一棵完全二叉树,它与等高度的满二叉树相比,在最后一层的右边缺少了5个结点。该树中每个结点上面的数字为对该结点的编号。

5.理想二叉树

与完全二叉树类似的一个概念为理想二叉树,它是在对应的满二叉树的最下一层中的任何位置缺少结点或不缺少结点。如在图6-5(a)的满二叉树的最底层缺少编号为10、13、14等3个结点,则构成一棵深度为4的理想二叉树。

由此可知,理想二叉树包含满二叉树和完全二叉树在内,也就是说,一棵满二叉树或完全二叉树必然是一棵理想二叉树,反之,一棵理想二叉树不一定是一棵满二叉树或完全二叉树。

二叉树的性质

二叉树上终端结点数等于双分支结点数加1

设二叉树上终端结点数用n0表示,单分支结点数用n1表示,双分支结点数用n2表示,则总结点数为n0+n1+n2;另一方面,在一棵二叉树中,所有结点的分支数(即度数)应等于单分支结点数加上两倍的双分支结点数,即等于n1+2n2。由树的性质可得:

n0+n1+n2=n1+2n2+1 即n0=n2+1

例如,在图6-4的二叉树BT中,度为2的结点数为2个,即A和C,度为0的结点数为3个,即D、E、G,它比度为2的结点数正好多1个。

  • 二叉树上第i层上至多有2i-1个结点(i≥1)

由树的性质2可知:度为k的树中第i层上至多有ki-1个结点。对于二叉树,树的度为2,将k=2代入ki-1即可得到此性质。

  • 深度为h的二叉树至多有2h-1个结点

由树的性质3可知:深度为h的k叉树至多有(kh-1)/(k-1)个结点。对于二叉树,树的度为2,将k=2代入(kh-1)/(k-1)即可得到此性质。

  • 对一棵二叉树中顺序编号为i的结点,若它存在左孩子,则左孩子结点的编号为2i;若它存在右孩子,则右孩子结点的编号为2i+1,若它存在双亲结点(即编号不等于1),则双亲结点的编号为[i/2]

完全二叉树中,对于编号为2的结点,其左孩子结点的编号为4,右孩子结点的编号为5,双亲结点的编号为1;对于树中的其他结点也可进行类似的分析。由于该树的结点的最大编号为10,所以分支结点的最大编号为5。

  • 具有n个结点的理想二叉树的深度为[log2(n+1)]或[log2n]+1

此性质可以从树的相应性质中直接导出,也可以进行如下证明。

证明:设所求理想二叉树的深度为h,由理想二叉树的定义可知,它的前h-1层都是满的,最后一层可以满,也可以不满,由此得到如下不等式:

2h-1-1h-1

可变换为: 2h-1h

取对数后得: h-12(n+1)≤h

即: log2(n+1)≤h

因h只能取整数,所以: h=log2(n+1)

完全二叉树的深度h和结点数n的关系,还可表示为:

2h-1≤n<2h

取对数后得: h-1≤log2n

即: log2n2n+1

因h只能取整数,所以: h=log2n+1

如对于图6-5(b)所示的完全二叉树,n=10,log211等于log211+1,其值为4。

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

  1. c语言将一个已知头结点的单链表逆序_C语言数据结构实现链表逆序并输出

    C语言数据结构实现链表逆序并输出 将一个链表逆序并输出.我用了两种方法来实现,第一种是借助了一个新的空链表:第二种是在原来链表的基础上直接实现逆序. 实例代码: 头文件: #include #incl ...

  2. C语言数据结构:什么是树?什么是二叉树?

    点击蓝字 关注我们 前言 在之前的数据结构学习中,我们学习了顺序表.链表.栈.队列这几种结构 它们都是用链表或者数组的方式来实现的,主要考察我们对结构体的运用 今天让我们来学习一个新的数据结构,也就是 ...

  3. c语言向自定数组_C语言一维数组的定义和引用

    C语言一维数组的定义和引用 C语言支持一维数组和多维数组.如果一个数组的所有元素都不是数组,那么该数组称为一维数组. 一维数组的定义方式 在C语言中使用数组必须先进行定义.一维数组的定义方式为: 类型 ...

  4. c语言判断二叉树是不是二叉排序树_C语言:数据结构-树表的查找

    二叉排序树的定义 二叉排序树(Binary Sort Tree)或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树非空,则在左子树的所有结点的值都小于它的根结点的值 若它的右子树非空,则在右子 ...

  5. java版数据结构解迷宫问题_C语言数据结构之迷宫问题

    本文实例为大家分享了数据结构c语言版迷宫问题栈实现的具体代码,供大家参考,具体内容如下 程序主要参考自严蔚敏老师的数据结构c语言版,在书中程序的大体框架下进行了完善.关于迷宫问题的思路可查阅原书. # ...

  6. c语言邻接表的构建_c语言数据结构--图的邻接矩阵和邻接表操作的基本操作

    #include #include #include #define MAX 100 typedef char DataType; typedef int VectorRelationType; ty ...

  7. c语言二叉树图形输出,C语言数据结构树状输出二叉树,谁能给详细的解释一下...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 void TranslevelPrint(Bitree bt) { struct node { Bitree vec[MAXLEN]; //存放树结点 i ...

  8. 二叉树寻找祖先C语言,微软算法面试题:给定两个二叉树节点,寻找其最近共同祖先...

    给定一颗二叉树,并指定二叉树中任意两个节点,要求找出这两个节点在二叉树中的最近祖先,假定二叉树每个节点都有一个指向其父节点的指针,图中没有画出来,要求算法的空间复杂度必须是O(1), 时间复杂度为O( ...

  9. 数据结构视频教程 -《[猎豹网校]数据结构与算法_C#语言》

    整个视频打包下载地址:史上最全的数据结构视频教程系列分享之<[猎豹网校]数据结构与算法_C#语言>,转载请保留出处和链接! 更多优秀资源请访问:我是码农 在猎豹网校授课的基本都是在IT行业 ...

最新文章

  1. 博士大佬为机器学习总结的人工智能入门指南!
  2. Jmeter性能测试之while控制器的使用
  3. linux给普通用户分配root权限
  4. centos cmake安装mysql_Centos安装mysql实例教程
  5. python 为什么元组中只包含一个元素时,需要在元素后面添加逗号?(消除歧义)
  6. 成长 | 《大厂晋升指南》学习总结(中)
  7. [蓝桥杯2017初赛]九宫幻方-数论+next_permutation枚举
  8. 伪命题:我们来谈谈校招生起薪的问题,它对你来说重要吗?
  9. C++ 文本文件的读取和写入
  10. 关于Python在Linux、Mac和Windows上的安装方法总结
  11. 比特币一种点对点的电子现金系统是哪一年诞生的_庆比特币诞生12周年|带你回顾比特币的前世今生...
  12. python信用卡客户_Python之信用卡模拟程序
  13. STM32F7通过QSPI驱动W25Q256芯片
  14. react中一个音频或视频播放的时候其他音视频暂停播放
  15. 数据统计分析(1):数据分析流程
  16. 单片机入门--常见单片机PIC\STM32
  17. 郑州财经学院第54次全国计算机,郑州财经学院第二期教师博士班开班
  18. 【Flutter组件】仿抖音双击点赞弹出爱心效果(可连点)
  19. 第十四届校模拟赛第一期(一)
  20. 安卓逆向Xposed HOOK TB直播APP的x-sign参数

热门文章

  1. MOSS SDK学习笔记系列文章
  2. Mysql报错Fatal error: Can#39;t open and lock privilege tables: Table #39;mysql.host#39; doesn#39;t...
  3. 二分查找(递归与非递归)
  4. PHP语言中global和$GLOBALS[]的分析
  5. [译]在启用浏览器功能的INFOPATH表单中实现基于SQL SERVER的多级联动的下拉式列表...
  6. quartusII中功能仿真和时序仿真的分析
  7. Codespaces
  8. 梯度提升决策树GBDT及其优秀改进XGBoost的浅析
  9. 洛谷 P1029 最大公约数和最小公倍数问题
  10. HDU 1233 还是畅通工程。