《数据结构》二叉数

news2025/1/27 13:07:55

学习目录

  • 树型结构
      • 概念
      • 树的重要概念
      • 树的表示形式
  • 二叉数
      • 概念
      • 特殊的二叉树
      • 二叉树的性质
      • 练习题

树型结构

概念

树是一种非线性的数据结构,由 n 个有限节点组成一个有层次关系的集合
它具有以下的特点:

  • 有一个特殊的结点,称为根结点,根结点没有前驱结点。
  • 除根结点外,其余结点有且只有一个前驱,可以有0个或多个后继。
  • 树是递归定义的 , 一棵树 (空树除外) 是由m棵子树构成的 (m >= 0)
    在这里插入图片描述

注意:树形结构中,子树之间不能有交集,否则就不是树形结构
下面二叉树的错误示范:
在这里插入图片描述

  • 每个二叉树只有一个根节点,而且子树是不能相交的
  • 除了根节点以外,其他子节点只能有一个父节点(一个孩子只能有一个父亲,父亲可以有多个孩子)
  • 一颗二叉数有 N 个节点的树有 N-1 条边

树的重要概念

在这里插入图片描述

  • 结点的度:说的是一个结点含有子树的个数
    比如:
    A节点的度为 6,子树为: B、C、D、E、F、G
    D 节点的度是 1,子树为: H
    F节点的度是 3,子树为:K、L、M

  • 树的度:一棵树中,所有结点度的最大值称为树的度
    比如:A节点是6,E节点是2,F节点是3,而A节点是最大的,所以树的度为 6

  • 叶子结点或终端结点:度为0的结点称为叶结点
    比如:B节点、C节点、H节点、O节点,它们的后面都没有子结点了

  • 双亲结点或父结点:若一个结点含有子结点,则这个结点称为其子结点的父结点
    比如:J 是 O、P的父节点,D 是 H 的父节点,F 是 K、L、M 的父节点

  • 孩子结点(子结点):一个结点含有的子树的根结点称为该结点的子结点
    如上图:B是A的孩子结点,H是D的孩子结点

  • 根结点:一棵树中,没有双亲结点的结点
    如上图:A

  • 结点的层次:从根开始定义起,根为第1层,根的子结点为第2层,以此类推

  • 树的高度或深度:树中结点的最大层次; 如上图:树的高度为4

树的以下概念只需了解,在看书时只要知道是什么意思即可:

  • 非终端结点或分支结点:度不为0的结点; 如上图:D、E、F、G…等节点为分支结点
  • 兄弟结点:具有相同父结点的结点互称为兄弟结点; 如上图:B、C是兄弟结点
  • 堂兄弟结点:双亲在同一层的结点互为堂兄弟;如上图:H、I互为兄弟结点
  • 结点的祖先:从根到该结点所经分支上的所有结点;如上图:A是所有结点的祖先
  • 子孙:以某结点为根的子树中任一结点都称为该结点的子孙。如上图:所有结点都是A的子孙
  • 森林:由m(m>=0)棵互不相交的树组成的集合称为森林

树的表示形式

树结构相对线性表就比较复杂了,要存储表示起来也比较麻烦
树有很多种表示方式,如:双亲表示法、孩子表示法、孩子双亲表示法、孩子兄弟表示法等等。
最常用的孩子双亲表示法、孩子兄弟表示法

class Node {
    int value; // 树中存储的数据
    Node firstChild; // 第一个孩子引用
    Node nextBrother; // 下一个兄弟引用
}

二叉数

概念

一棵二叉树是结点的一个有限集合,该集合为空或者是由一个根节点加上两棵别称为左子树和右子树的二叉树组成
在这里插入图片描述

二叉树的特点:

  • 每个节点最多有两棵子树,即不存在超过度为2的节点
  • 二叉树的子树有左右之分,且左右不能颠倒

注意:对于任意的二叉树都是由以下几种情况复合而成的:
在这里插入图片描述

特殊的二叉树

特殊的二叉树大致分为二种:

  • 满二叉树
    一棵二叉树,如果每层的结点数都达到最大值,则这棵二叉树就是满二叉树
    如果一棵二叉树的层数为K,且结点总数是2 ^ k - 1 ,则它就是满二叉树。
    下面的二叉树层数为 4,结点总数是 2 ^ 4 -1,也就是 15

在这里插入图片描述

  • 完全二叉树
    完全二叉树是效率很高的数据结构,完全二叉树是由满二叉树而引出来的
    对于深度为K的,有n个结点的二叉树,当且仅当其每一个结点都与深度为K的满二叉树中编号从0至n-1的结点一 一对应时称之为完全二叉树
    要注意的是满二叉树是一种特殊的完全二叉树

顺序是从上到下,从左到右,不能颠倒,按照顺序存放
在这里插入图片描述

二叉树的性质

    1. 若规定根结点的层数为1,则一棵非空二叉树的第i层上最多有 2 ( i − 1 ) 2 ^ (i-1) 2(i1)个结点
      这条概念计算得是一个二叉树第 i 层有多少个结点
      例如:根节点是1,第 3 层就 2 3 2 ^ 3 23 -1 ,也就是 7 个节点
    1. 若规定只有根结点的二叉树的深度为1,则深度为K的二叉树的最大结点数是 2 k 2 ^ k 2k -1 (k>=0)
      这条概念计算得是一个二叉树的最大结点数是多少
      例如:

在这里插入图片描述

    1. 对任何一棵二叉树, 如果其叶结点个数为 n0, 非叶结点个数为 n2,则有n0=n2+1
      相当于叶子节点的个数比度为2的非叶子节点多 1 个
      在这里插入图片描述
    1. 具有n个结点的完全二叉树的深度k为 上取整
      例如:一颗二叉树的节点个数是 18 个,它的深度是 5,不能是 4
      2 4 2^4 24 = 16 放不下,要向上取整 2 5 2^5 25 = 32
    1. 对于具有n个结点的完全二叉树,如果按照从上至下从左至右的顺序对所有节点从0开始编号,
      则对于序号为i的结点有:
      若i>0,双亲序号:(i-1)/2;i=0,i为根结点编号,否则无双亲结点; 若从1开始编号,则它的双亲结点的编号为( i / 2 )
      若2i+1<n,左孩子序号:2i+1,否则无左孩子; 若从1开始编号左孩子结点的编号为2 i
      若2i+2<n,右孩子序号:2i+2,否则无右孩子; 若从1开始编号左孩子结点的编号为2 i +1
      例如:
      假设:如果已知父亲节点下标为 2 ,则左孩子下标 = 2 * i + 1,右孩子下标 = 2 * i + 2

如果已知孩子节点为 3,去求父亲,( 3 -1 )/ 2 = 1
如果已知孩子节点为 3,去求父亲,( 4 - 1 )/ 2 = 1

在这里插入图片描述

练习题

  1. 某二叉树共有 399 个结点,其中有 199 个度为 2 的结点,则该二叉树中的叶子结点数为( )
    A 不存在这样的二叉树
    B 200
    C 198
    D 199

根据以上的概念,叶子节点比度为2的节点多一个,答案:B

  1. 在具有 2n 个结点的完全二叉树中,叶子结点个数为( )
    A n
    B n+1
    C n-1
    D n/2
    在这里插入图片描述

一个二叉树的总节点个数如果是奇数,总节点个数 = N0 + N2,如果是偶数,总节点个数 = N0 + 1 + N2
本题中 2n 个结点一定是偶数个,因为在任意二叉树种,叶子节点比度为 2 的节点多一个,
假设:度为0 的节点 为 x 个,所以 2n-1 = x + x-1
答案:A

  1. 一个具有767个节点的完全二叉树,其叶子节点个数为()
    A 383
    B 384
    C 385
    D 386

二叉树的总结点:767 个,是个奇数,767 = n0(非叶子节点)+ n2(叶子节点)
767 = x + x - 1 768 = 2 * x x = 364
答案:B

  1. 一棵完全二叉树的节点数为531个,那么这棵树的高度为( )
    A 11
    B 10
    C 8
    D 12

本题考的是二叉树的性质的第四条
2 9 = 512 2^9 = 512 29=512放不下向上取整,也就是 2 5 2^5 25 = 1024
答案:B

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/104930.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【 Threejs 】- Shader 着色器实例渲染教程

着色器在threejs中是一个难点&#xff0c;话不多说&#xff0c;先来看看着色器是什么&#xff1f; 如果您已经有使用计算机绘图的经验&#xff0c;您就会知道在这个过程中您先画一个圆&#xff0c;然后画一个矩形、一条线、一些三角形&#xff0c;直到您组成您想要的图像。这个…

面试真题 | 什么是 Redis ? Redis缓存应用场景有哪些?

面试官问题 redis击穿、穿透有什么区别&#xff1f;如何设计用例及测试 Redis 的基本概念 在没有添加 Redis 的时候&#xff0c;后端的查询流程是&#xff1a; 用户访问页面。请求后端服务。经过逻辑处理后&#xff0c;去数据库查询信息。 在添加 Redis 的之后&#xff0c;…

MySQL 服务端口大全

介绍 MySQL默认服务端口3306/TCP都不会陌生&#xff0c;但MySQL提供服务只有单纯的这个端口吗。在8.0版本默认启动的时候会发现&#xff0c;出现新的端口。 可以说MySQL使用的端口数量取决于所启用的特性、所使用的组件、应用程序连接的方式以及环境的其他方面。 按照官方说…

转速传感器信号隔离变送器正弦波输入方波信号输出

特点 转速传感器信号直接输入&#xff0c;方波信号输出正弦波、锯齿波信号输入&#xff0c;方波信号输出200mV峰值微弱信号的放大与整形不改变原波形频率&#xff0c;响应速度快电源、信号&#xff1a;输入/输出 3000VDC三隔离辅助电源&#xff1a;5V、12V、15V或24V直流单电源…

Huffman编码

目录背景Huffman编码代码部分背景 在数据传输&#xff0c;保存的时候&#xff0c;特别是在数据量特别大的时候传输&#xff0c;保存数据是一件特别麻烦的事。比如逛淘宝的时候&#xff0c;首页会有很多商家展示自己产品的高清图片&#xff0c;如果不对图片进行压缩服务端保存图…

经历百度、美团两次被裁后,我能在小公司躺平吗?

百度裁员后我进入体制内&#xff0c;专心学习自动化 百度被裁后&#xff0c;我意识到自学效果不佳&#xff0c;跟不上职场的所需&#xff0c;于是有了系统学习的想法。 这时的新工作是在体制内&#xff0c;工作强度不大&#xff0c;时间上也比较自由&#xff0c;便正式成为了…

非零基础自学Golang 第12章 接口与类型 12.5 类型断言

非零基础自学Golang 文章目录非零基础自学Golang第12章 接口与类型12.5 类型断言12.5.1 ok-pattern12.5.2 switch-type第12章 接口与类型 12.5 类型断言 类型断言是使用在接口变量上的操作。 简单来说&#xff0c;接口类型向普通类型的转换就是类型断言。 类型断言的语法是…

【关于时间序列的ML】项目 1 :使用 Python 进行 Covid-19 病例 预测

&#x1f50e;大家好&#xff0c;我是Sonhhxg_柒&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流&#x1f50e; &#x1f4dd;个人主页&#xff0d;Sonhhxg_柒的博客_CSDN博客 &#x1f4c3; &#x1f381;欢迎各位→点赞…

rk3568 | 瑞芯微平台GPIO引脚驱动编写

最近在玩瑞芯微平台的产品&#xff0c;移植了几个设备的驱动&#xff0c;遇到了一些问题&#xff0c;总结后发现大部分问题都出在了GPIO配置的问题上&#xff0c;写下本篇文章&#xff0c;用来分享一下调试的心得。 有喜欢瑞芯微的朋友&#xff0c;可以加我好友&#xff0c;拉…

JVM的作用,结构

源文件经过编译&#xff0c;生成字节码文件 JVM执行字节码文件&#xff08;实际上就是将字节码解释成具体平台上的机器指令&#xff09; jdk&#xff0c;jre&#xff0c;jvm三者的关系&#xff1a; jvm的组成&#xff1a; (1)类加载器子系统:负责将.class文件加载到JVM中 (2)…

初学编程,我们应该怎么做,十年老鸟带你入门。

问问自己学编程的真正目的&#xff0c;仅仅是想应付考试考证&#xff0c;还是真心想从事编程方面的工作。仅仅处于功利性而不是真心喜欢&#xff0c;人生苦短&#xff0c;劝不要来浪费时间&#xff0c;找其它真心喜欢的事情。不是社会喜欢的&#xff0c;不是父母喜欢的&#xf…

这6个微信隐藏功能你真的知道吗?学到就是赚到

我们常用的软件——微信&#xff0c;它有着许多隐藏功能&#xff0c;这些功能其实是很好用的&#xff0c;但是一直被我们忽略掉&#xff0c;现在我整理出来了&#xff0c;一起来看看吧。1.登录设备管理 我们平常在其它设备登录&#xff0c;第一次登录需要二次验证才能成功&…

jdk11新特性——新的Epsilon垃圾收集器

目录一、Epsilon垃圾收集器概述二、Epsilon垃圾收集器用法三、Epsilon垃圾收集器代码示例四、使用Epsilon垃圾收集器的原因五、使用Epsilon垃圾收集器的主要用途一、Epsilon垃圾收集器概述 A NoOp Garbage CollectorJDK上对这个特性的描述是: 开发一个处理内存分配但不实现任何…

【Flink】Flink GET operation failed: Server side error 从blobserver下载错误

文章目录 1.概述2.服务器端1.概述 flink 报错 Flink GET operation failed: Server side error 从blobserver下载错误 java.io.IOException: GET operation failed: Server side error: /tmp/hadoop-www/nm-lo

技术栈入门-------Redis

使用redis的准备工作 1、在虚拟机上安装redis&#xff08;前提是安装了docker容器&#xff09; 上面使用到的命令 docker pull redis mkdir -p /mydata/redis/confdocker run -p 6379:6379 --name redis -v /mydata/redis/data:/data \ -v /mydata/redis/conf/redis.conf:/et…

Python相关软件下载教程

前言 想要在电脑端运行python程序&#xff0c;需要先下载三个软件&#xff1a;Python解释器&#xff0c;编辑器&#xff08;使用Visual Studio Code&#xff0c;简称VS Code&#xff09;&#xff0c;python软件包管理系统&#xff08;简称pip&#xff09;。 一、MacOS系统安装…

如何使用ArcGIS进行点抽稀(优化版)

概述 有的时候我们手上的数据很密集&#xff08;比如POI数据&#xff09;&#xff0c;全部加载出来会很挤&#xff0c;在我们只需要部分数据的情况下就需要对其进行抽稀&#xff0c;这里为大家介绍一种比较简单的抽稀方法&#xff0c;希望能对大家有所帮助。 按百分比抽稀 在…

ICG-Hydrazide,用于光热治疗或光动力治疗

ICG能够强烈地吸收光能将其转化为热能或产生单线态氧&#xff0c;可用于光热治疗(PTT)或光动力治疗(PDT)。 英文名称&#xff1a;ICG-Hydrazide 外观&#xff1a;固体/粉末 质量纯度&#xff1a;95% 储存条件&#xff1a;-20℃ 结构式&#xff1a; 凯新生物运输说明: 极低…

Linux学习-87-LNMP一键安装过程

17.16 LNMP安装的前期准备&#xff08;LNMP一键安装包下载&#xff09; 手工安装 LNMP 环境&#xff0c;那么同样需要安装大概 10多个源码包&#xff08;根据版本和功能不同而不同&#xff09;。不过&#xff0c;现在网上非常流行的 LNMP 环境的搭建过程是采用 LNMP 一键安装包…

25岁,放弃4年所学专业,年薪20W+,我选择了转行。

25岁,没被迫转行, 是主动选择转行&#xff0c;放弃海外20W年薪“稳定”生活&#xff0c;目前已辞职&#xff0c;正在休整准备寻找工作中。希望我的经历可以给大家带来一点启发和借鉴。 首先自我介绍下。90后大叔&#xff0c;土木工程专业&#xff0c;2017年毕业于中南搬砖摇篮…