二叉树的基本概念(定义,特性,存储结构等)

2023-10-30


一.二叉树的定义


  二叉树(Binary Tree)是n(n>=0)个数据元素的有限集合,该集合可以为空(空二叉树),也可以由一个称为根(root)的元素及两个不相交的,被分别称为左子树和右子树的二叉树组成
在这里插入图片描述
  如上图中含有7个结点,其中A是根节点,左子树TL由{B,D,E}构成,右子树TR由{C,F,G}构成;而左子树TL中B是根结点,左子树是{D},右子树是{E};右子树TR中,C是根结点,左子树为空,右子树为{F,G};以此类推。
  由上述可以看出在二叉树中用到了递归的概念。即用二叉树来定义二叉树。


二叉树的特点:

 ①每个结点最多有两棵子树
 ②左子树和右子树是有顺序的,次序不能颠倒(若将其左右子树颠倒,就成为另外一颗不同的二叉树)

二叉树有五种基本形态:
 1.空树(0个结点)
 2.只有一个根结点
 3.根节点只有左子树
 4.根节点只有右子树
 5.根节点左右子树都有

二.二叉树的一些概念


1.结点
  :结点所拥有的子树个数称为该结点的度;二叉树中各结点度的最大值称为该二叉树的度;度为0的结点称为叶子结点,或者终端结点;度不为0的称为分支结点。一颗二叉树的结点除了叶子节点,其余的都是分支结点
  

2.结点的层数以及二叉树的深度
  结点层数:根结点的层数为1,其余结点的层数等于它的双亲结点加1
  深度:二叉树中叶结点的最大层数定义为二叉树的深度


3.特殊的二叉树
 ①满二叉树(所有的分支结点都存在左子树和右子树,并且所有的叶子结点都在同一层上)
在这里插入图片描述
 ②完全二叉树 (树中的结点从上到下,从左到右依次进行编号排序)
在这里插入图片描述

  满二叉树一定是完全二叉树,但是完全二叉树不一定是满二叉树



三.二叉树的性质(非常重要)


 1.一颗非空二叉树的第i层上最多有2^(i-1)个结点(i>=1)
 2.一颗深度为k的二叉树中,最多有2^k-1个结点
 3.对于一颗非空二叉树,如果叶结点数为n0,度数为2的结点数为n2,则有n0=n2+1
 4.具有n个结点的完全二叉树的深度为 |lbn|+1
 5.对于具有n个结点的完全二叉树,如果按照从上到下和从左到右的顺序对二叉树中所有结点从1开始编号,则对于任意序号结点来说,有:
  ①如果i>1,则序号i的结点的双亲结点序号为i/2;如果i=1,则此时结点为根结点,无双亲结点。
  ②如果2i<=n,则序号为i的结点的左孩子为2i;若2i>n,则序号为i的结点无左孩子
  ③如果2i+1<=n,则序号为i的结点的右孩子为2i+1;如果2i+1>n,则序号为i的结点无右孩子


四.二叉树的存储结构

  在数据结构中数据的物理存储结构可以分为两种,一种是顺序存储,一种是链式存储结构。所以二叉树的存储结构也有两种,即顺序存储和链式存储


1.顺序存储结构
  用一组连续的存储单元存放二叉树中的结点。一般按照二叉树结点从上至下,从左到右的顺序存储。这样做可以最大可能的节省存储空间,又可以利用数组元素下标值确定结点在二叉树中的位置,以及结点之间的关系
在这里插入图片描述
  上述图中是一颗完全二叉树,顺序存储是比较适合完全二叉树的,但是对于一般的二叉树来说按照从上到下,从左到右依次来存储,只有先添加一些并不存在的空结点,使之成为一颗完全二叉树的形式,然后再用数组来存储,显然这样会造成大量的空间浪费,若是二叉树是一颗单支二叉树,空间的浪费更加严重。

2.链式存储结构

  用链表表示一颗二叉树,用链来指示元素的逻辑关系

  ①二叉链表存储
  对于一个任意的二叉树,每个结点最多有两个孩子,一个双亲结点,所以可以设计让每一个结点,至少包括三个域:数据域,左孩子域,右孩子域(其中数据域存放数据信息,lchild和rchild分别存放指向左孩子和右孩子的指针),当某个孩子不存在时,则域为空(用符号^或者NULL表示)
在这里插入图片描述
二叉链表表示:
在这里插入图片描述



  ②三叉链表存储
  每个结点由四个域组成:
在这里插入图片描述
  前面三个域和二叉链表的域意义相同,添加的parent域则用来存储指向该结点双亲结点的指针(既便于查找孩子结点,又便于查找双亲结点,缺点就是增加了空间的开销)

三叉链表表示:
在这里插入图片描述

  上述存储结构各有各的优缺点,所以在具体应用中,可以根据二叉树的形态和具体需求来决定二叉树的存储结构

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

二叉树的基本概念(定义,特性,存储结构等) 的相关文章

  • c语言入门----详解分支语句(if语句)

    文章目录 一 前言 二 顺序结构 三 为什么会有分支语句 四 if语句 五 if语句形式 1 if的基本形式 2 有关if的例子 3 有关if的易错提醒 六 if else语句 1 为什么会有if else语句 2 if else的基本形式
  • Canvas和SVG有什么区别

    在项目开发中也许会涉及到图形 经常用到的就是svg和canvas两种画图方式 下面就让我们看一看他们两者的区别 svg绘制出来的每一个图形的元素都是独立的DOM节点 能够方便的绑定事件或用来修改 canvas输出的是一整幅画布 svg输出的

随机推荐

  • RabbitMQ消息可靠性(二)-- 消费者消息确认

    一 消费者消息确认是什么 在这种机制下 消费者在接收到消息后 需要向 RabbitMQ 发送确认信息 告知 RabbitMQ 已经接收到该消息 并已经处理完毕 如果 RabbitMQ 没有接收到确认信息 则会将该消息重新加入队列 等待其他消
  • supervisor系列:2、运行supervisor

    supervisor系列 2 运行supervisor 文章目录 supervisor系列 2 运行supervisor 1 添加一个程序 2 运行supervisord 2 1 supervisord命令行配置 3 运行superviso
  • 【剑指Offer题解:java】二叉树的镜像

    文章目录 题目 分析 代码 题目 操作给定的二叉树 将其变换为源二叉树的镜像 二叉树的镜像定义 源二叉树 8 6 10 5 7 9 11 镜像二叉树 8 10 6 11 9 7 5 分析 递归交换左右子树即可 1 root null直接返回
  • 【环境配置】基于Docker配置Chisel-Bootcamp环境

    文章目录 Chisel是什么 Chisel Bootcamp是什么 基于Docker配置Chisel Bootcamp 官网下载Docker安装包 Docker换源 启动Bootcamp镜像 常用docker命令 可能产生的问题 Chise
  • Mysql获取数据库的所有表以及表所有字段信息

    mysql获取所有表以及表所有字段信息 SELECT TB TABLE SCHEMA 模式 TB TABLE NAME 表名 TB TABLE COMMENT 表名注释 COL COLUMN NAME 字段名 COL COLUMN TYPE
  • 风投与IT

    风投即风险投资 广义的风险投资泛指一切具有高风险 高潜在收益的投资 狭义的风险投资是指以高新技术为基础 生产与经营技术密集型产品的投资 根据美国全美风险投资协会的定义 风险投资是由职业金融家投入到新兴的 迅速发展的 具有巨大竞争潜力的企业中
  • vue设置不出现滚动条的全屏背景100%

    1 想在登录页面设置页面背景占比100 而且不出现滚动 首先给你所需要的元素设置好css 2 如果没生效 看下App vue中是否有定义 app的宽高 将其设置成100 3 如果综上两部设置完成还未生效 那就需要在index html文件中
  • kubernetes集群实战——资源限制(内存、CPU、NameSpace)

    1 k8s容器资源限制 Kubernetes采用request和limit两种限制类型来对资源进行分配 request 资源需求 即运行Pod的节点必须满足运行Pod的最基本需求才能 运行Pod limit 资源限额 即运行Pod期间 可能
  • MySQL必知必会 学习笔记 第一章 了解SQL

    数据库是保存有组织的数据的容器 通常是一个或一组文件 数据库软件称为DBMS 数据库管理系统 数据库是被DBMS创建和操纵的容器 数据库究竟是文件或其他东西并不重要 因为你不会直接访问数据库 而是间接通过DBMS替你访问数据库 表是某种特定
  • BootstrapTable checkbox默认选中

    BootstrapTable 在Web后台管理项目中对表格展示数据使用居多 主要是表格的多条件查询 分页 排序等功能 我们的项目中前端框架是Bootstrap 所以很多插件都是支持Bootstrap的 bootstrap table是一款非
  • 关于List的subList原理分析

    今天在看Java开发手册的时候看到这么一句话 如果需要对list某个范围内的元素进行操作 可以使用subList 任何对子列表的操作最终都会反映到原列表中 例如list subList 0 2 clear 这样的操作便会对原列表进行修改 修
  • SARScape中用sentinel-1数据做SBAS-InSAR完整流程(1/2)

    SARScape中用sentinel 1数据做SBAS InSAR完整流程 1 SABA InSAR原理简述 2 数据采集和预设 2 1 SAR数据采集 2 2 DEM数据下载与放置 2 3 精密轨道数据下载与放置 2 4 制作研究区范围矢
  • 三分钟教你小程序实现无感刷新!

    无感刷新 无感刷新对于前端来说是一项非常实用的技术 其本质是为了优化用户体验 让用户感受不到token已经过期 本质上就是登录时 储存token和refresh token 当token过期或错误时不需要用户跳回登录页重新登录 而是在响应拦
  • python读取文件名存到list_python读取文件名称生成list的方法

    下面为大家分享一篇python读取文件名称生成list的方法 具有很好的参考价值 希望对大家有所帮助 一起过来看看吧 经常需要读取某个文件夹下所有的图像文件 我使用python写了个简单的代码 读取某个文件夹下某个后缀的文件 将文件名生成为
  • 力扣 删除链表的节点

    给定单向链表的头指针和一个要删除的节点的值 定义一个函数删除该节点 返回删除后的链表的头节点 注意 此题对比原题有改动 示例 1 输入 head 4 5 1 9 val 5 输出 4 1 9 解释 给定你链表中值为 5 的第二个节点 那么在
  • 手动实现Spring IOC 跟 AOP 的雏形

    关注后回复 进群 拉你进程序员交流群 作者丨sowhat1412 来源丨sowhat1412 Spring Spring make java more simpleSpring make java more modernSpring mak
  • 在Linux下用C语言写贪吃蛇;

    项目思路 ncurses上下左右键的获得 gt 贪吃蛇地图的实现 gt 显示贪吃蛇的完整身子 gt 贪吃蛇向右移动 gt 贪吃蛇撞墙找死 gt 贪吃蛇自行向右行走与页面一起刷新 利用线程解决 gt 贪吃蛇四个方向的自由走位 gt 贪吃蛇吃饭
  • 教程:群体演化方法分析玉米的驯化与改良

    一般文章在筛选 正选择区间 时 大多 不考虑 群体的 演化历史 即不考虑 群体大小 的变化 只进行亚群之间各种群体遗传参数的对比 这可能会产生大量的假阳性 另一方面 研究一般也 不考虑 遗传信息的 迁移 所以作者希望将群体演化历史及遗传信息
  • MySQL高性能索引策略

    文章目录 高性能索引策略 独立的列 前缀索引 多列索引 选择合适的索引列顺序 聚簇索引 覆盖索引 使用索引扫描来做排序 高性能索引策略 正确地创建和使用索引是实现高性能查询的基础 高效地选择和使用索引有很多种方式 其中有些是针对特殊案例的优
  • 二叉树的基本概念(定义,特性,存储结构等)

    一 二叉树的定义 二叉树 Binary Tree 是n n gt 0 个数据元素的有限集合 该集合可以为空 空二叉树 也可以由一个称为根 root 的元素及两个不相交的 被分别称为左子树和右子树的二叉树组成 如上图中含有7个结点 其中A是根