当前位置: 首页 > news >正文

C语言二叉树的基本概念(一)

目录

二叉树

二叉树的分类(目前只谈两种)

满二叉树

完全二叉树

二叉树的性质(其余的可以自己总结)

选择练习

二叉树的存储结构

顺序存储方式

链式存储方式


二叉树

定义:二叉树是一种特殊的树状数据结构,它由多个节点组成,每个节点最多有两个子节点(左结点和右结点)这些子节点可以为空,任意的二叉树均由以下几种情况复合而成的:

因此我们可以得到以下结论: 

  1. 二叉树的度小于等于2,二叉树的度不一定等于2,但是度为2的树就是二叉树
  2. 二叉树是有序树,子树有左右之分,不能颠倒

二叉树的分类(目前只谈两种)

满二叉树

定义:每一层的结点数都达到最大值的二叉树称为满二叉树

若二叉树层数为k,且结点总数为(2^k)-1 ,则为满二叉树

完全二叉树

定义:二叉树的最后一层是不满情况的二叉树称为完全二叉树,满二叉树是一种特殊的完全二叉树

若二叉树层数为k,且树中结点总数为[2^(k-1) ,(2^k) - 1],则为完全二叉树

二叉树的性质(其余的可以自己总结)

1. 若规定根节点的层数为1,则棵非空二叉树的第k层上最多有2^(k-1)个结点

2. 若规定根节点的层数为1,则深度为k的二叉树的最大结点总数为(2^k) - 1

3. 若规定根节点的层数为1,则深度为k的二叉树的最小结点总数为2^(k - 1)

4. 完全二叉树中,度为2的结点总数 = 叶子结点总数 - 1

5. 任意一棵二叉树, 叶子节点总数 = 分支节点总数 + 1(根节点)

6. 任意一棵二叉树,结点总数 = 叶子结点总数 + 分支节点总数(度为2的结点)

7. 对于一颗完全二叉树,2 * 叶子结点总数 + 度为1的结点总数 - 1 = 结点总数

8. 完全二叉树 总结点数为偶数 则度为1的结点数为1 总节点数为奇数 则度为1的结点数为0

9. 若规定根节点的层数为1,则具有n个结点的二叉树的深度,h = (log以2为底n+1的对数)

10. 对于具有n个结点的完全二叉树,如果按照从上至下从左至右的数组顺序对所有节点从0开始编号,则对于序号为i的结点有:

  1. 若i=0,i为根节点下标,无双亲节点
  2. 若i>0,i下标的结点的双亲结点的下标为(i-1)/ 2
  3. 若i>0,i下标的结点的左孩子结点的下标为2 * i +1
  4. 若i>0,i下标的结点的左孩子结点的下标为2 * i +2
  5. 对于节点 i,若 2 * i + 1 < n,则节点 i 有左孩子。若 2 * i + 1 >= n,则节点 i 没有左孩子

  6. 对于节点 i,若 2 * i + 2 < n,则节点 i 有右孩子。若 2 * i + 2 >= n,则节点 i 没有左孩子

选择练习

1、某二叉树共有 399 个结点,其中有 199 个度为 2 的结点,则该二叉树中的叶子结点数为(B)

A 不存在这样的二叉树

B 200

C 198

D 199

结点总数 = 叶子结点总数 + 分支结点总数(度为2的结点)399    =       ?    +     199 ? =  200

2、在具有 2n 个结点的完全二叉树中,叶子结点个数为(A )

A n

B n+1

C n-1

D n/2

//文字描述
完全二叉树中,度为2的结点总数 = 叶子结点总数 - 1又因为,叶子结点总数 + 度为1的结点总数 + 度为2的结点总数= 2n则可得:2*叶子结点总数 + 度为1的结点总数 - 1 = 2n完全二叉树中,度为1的结点总数只能为0或1,由于2n为偶数,故度为1的结点总数 = 1因此,叶子结点总数 = n//简化描述
完全二叉树中,有n2 = n0 - 1再根据题设条件,得n0 + n1 + n2 = 2n则可得:2n0 + n1 - 1 = 2n完全二叉树中,n1只能为0或1,由于2n为偶数,故n1 = 1因此,n0 = n

3、一棵完全二叉树的节点数位为531个,那么这棵树的高度为(B )

A 11

B 10

C 8

D 12

若二叉树层数为k,且树中结点总数为[2^(k-1) ,(2^k) - 1],则为完全二叉树A:[2^(11-1) ,(2^11) - 1] = [1024,2047]   1024 > 531B:[2^(10-1) ,(2^10) - 1] = [512,1023]    512  < 531 < 1023C:[2^(8-1) ,(2^8) - 1] = [128,511]       511  < 531D:[2^(12-1) ,(2^12) - 1] = [2048,4095]   2048 > 531

4、一个具有767个节点的完全二叉树,其叶子节点个数为(B)

A 383

B 384

C 385

D 386

完全二叉树 总结点数为偶数 则度为1的结点数为1 总节点数为奇数 则度为1的结点数为02 * 叶子结点总数 + 度为1的结点总数 - 1 = 结点总数767为奇数,故度为1的结点总数为0,故:2 * 叶子结点总数 - 1 = 结点总数2 *      ?     - 1 =    767? = 384

二叉树的存储结构

顺序存储方式

        顺序存储方式即使用组为底层逻辑进行存储一般用于实现完全二叉树,因为对不完全二叉树使用顺序存储会存在空间浪费:

二叉树顺序存储在物理逻辑上是一个数组,在虚拟逻辑上是一颗二叉树

链式存储方式

        链式存储方式即使用链表为底层逻辑进行存储,同时链表还可以表示二叉树中各元素间的逻辑关系。通常的方法是链表中每个结点由三个域组成,数据域和左右指针域,左右指针分别用来给出该结点左孩子和右孩子所在的链结点的存储地址。链式结构又分为二叉链表和三叉链表,前我们学习的一般都是二叉链,在学习至红黑树时会用到三叉链......

~over~

相关文章:

  • 【OpenCV】计算机视觉图像处理基础知识
  • 校园外卖小程序源码系统 附带完整的搭建教程
  • 超简单,NodeJs发送短信验证码的4种方式+例子
  • 【开题报告】基于SpringBoot的自闭症知识宣传平台的设计与实现
  • 无公网IP环境Windows系统使用VNC远程连接Deepin桌面
  • PHP使用HTTP代码示例模板
  • 医院有HIS系统,为什么还要开发预约挂号小程序?数据如何互通?
  • springboot数据格式验证——自定义日期格式验证及list验证
  • js vue 输入正确手机号/邮箱后,激活“发送验证码”按钮
  • springboot 在自定义注解中注入bean,解决注入bean为null的问题
  • mac M系列芯片安装chatGLM3-6b模型
  • 软件测试外包干了2个月,技术进步2年。。。
  • ComplexHeatmap热图专栏 | 6. 3D热图绘制教程
  • 基于单片机的电子密码锁设计
  • GCN01——Ubuntu中设置vivado编辑器为vscode
  • 收藏网友的 源程序下载网
  • “大数据应用场景”之隔壁老王(连载四)
  • 【399天】跃迁之路——程序员高效学习方法论探索系列(实验阶段156-2018.03.11)...
  • 【Redis学习笔记】2018-06-28 redis命令源码学习1
  • Akka系列(七):Actor持久化之Akka persistence
  • axios 和 cookie 的那些事
  • FastReport在线报表设计器工作原理
  • Java方法详解
  • Java小白进阶笔记(3)-初级面向对象
  • Laravel 菜鸟晋级之路
  • SegmentFault 社区上线小程序开发频道,助力小程序开发者生态
  • webpack4 一点通
  • 初探 Vue 生命周期和钩子函数
  • 互联网大裁员:Java程序员失工作,焉知不能进ali?
  • 聊聊redis的数据结构的应用
  • 使用 Node.js 的 nodemailer 模块发送邮件(支持 QQ、163 等、支持附件)
  • 小程序button引导用户授权
  • 一个6年java程序员的工作感悟,写给还在迷茫的你
  • ​LeetCode解法汇总307. 区域和检索 - 数组可修改
  • #laravel 通过手动安装依赖PHPExcel#
  • #LLM入门|Prompt#1.8_聊天机器人_Chatbot
  • #stm32整理(一)flash读写
  • #我与Java虚拟机的故事#连载08:书读百遍其义自见
  • (12)Linux 常见的三种进程状态
  • (html转换)StringEscapeUtils类的转义与反转义方法
  • (二)linux使用docker容器运行mysql
  • (附源码)基于SSM多源异构数据关联技术构建智能校园-计算机毕设 64366
  • (官网安装) 基于CentOS 7安装MangoDB和MangoDB Shell
  • (一)Dubbo快速入门、介绍、使用
  • (一)硬件制作--从零开始自制linux掌上电脑(F1C200S) <嵌入式项目>
  • (原创) cocos2dx使用Curl连接网络(客户端)
  • (转)shell调试方法
  • (转载)VS2010/MFC编程入门之三十四(菜单:VS2010菜单资源详解)
  • .L0CK3D来袭:如何保护您的数据免受致命攻击
  • .net 4.0 A potentially dangerous Request.Form value was detected from the client 的解决方案
  • .NET 简介:跨平台、开源、高性能的开发平台
  • .net程序集学习心得
  • .NET建议使用的大小写命名原则
  • @DependsOn:解析 Spring 中的依赖关系之艺术
  • [ C++ ] STL---仿函数与priority_queue