【数据结构】二叉树(一)——树和二叉树的概念及结构

在这里插入图片描述

前言:
本篇博客主要了解什么是树,什么是二叉树,以及他们的概念和结构。


文章目录

  • 一、树的概念及结构
    • 1.1 树的基本概念
    • 1.2 树的相关特征
    • 1.3 树的实现
  • 二、二叉树的概念及性质
    • 2.1 二叉树的概念
    • 2.2 二叉树的性质

一、树的概念及结构

1.1 树的基本概念

树(Tree)是一种非线性数据结构,是一种层次结构,其中每个节点都有一个父节点(除了根节点)和零个或多个子节点。

树(Tree)这个数据结构被称为“树”,是因为它的图形结构在形状上类似于自然界中的倒立的树。

考虑一棵真实的树,它有一个主干(树干),从树干上生长出许多分支,这些分支又分支出更小的枝叶,最终形成树冠。整体上,树的形状呈分层的结构,从根部到叶子的路径是有序的。

对比到数据结构中的树,树的根节点相当于树的根部,而节点和边的层次结构形成了树状的分支。这种分层结构反映了树的层次性质,每一层都代表了不同的层次或深度。

在这里插入图片描述
当判断一个数据结构是否是树时,可以考虑以下几个特点:

  1. 有且仅有一个根节点: 树结构只有一个根节点,所有的其他节点都通过边连接到根节点。

  2. 每个节点有零个或多个子节点: 每个节点可以有零个或多个子节点,这些子节点也是树的节点,形成了树的分支结构。

  3. 没有循环: 在树中不能存在环,即不能有从某个节点出发经过若干边回到该节点的路径。

  4. 节点之间是有序的: 树中的节点之间是有序的,即每个节点都有一个特定的位置,而子节点的顺序也是确定的。这个顺序通常是由添加或创建节点的顺序来确定的。

  5. 任意两节点间有唯一路径: 从树的根节点到任意一个节点,都有唯一的路径。

以下是一些非树的例子
在这里插入图片描述


1.2 树的相关特征

在这里插入图片描述

  1. 节点的度: 一个节点含有的子树的个数称为该节点的度; 如上图:A的为6
  2. 叶节点或终端节点: 度为0的节点称为叶节点; 如上图:B、C、H、I…等节点为叶节点
  3. 非终端节点或分支节点: 度不为0的节点; 如上图:D、E、F、G…等节点为分支节点
  4. 双亲节点或父节点: 若一个节点含有子节点,则这个节点称为其子节点的父节点; 如上图:A是B的父节点
  5. 孩子节点或子节点: 一个节点含有的子树的根节点称为该节点的子节点; 如上图:B是A的孩子节点
  6. 兄弟节点: 具有相同父节点的节点互称为兄弟节点; 如上图:B、C是兄弟节点
  7. 树的度: 一棵树中,最大的节点的度称为树的度; 如上图:树的度为6
  8. 节点的层次: 从根开始定义起,根为第1层,根的子节点为第2层,以此类推;
  9. 树的高度或深度: 树中节点的最大层次; 如上图:树的高度为4
  10. 堂兄弟节点: 双亲在同一层的节点互为堂兄弟;如上图:H、I互为兄弟节点
  11. 节点的祖先: 从根到该节点所经分支上的所有节点;如上图:A是所有节点的祖先
  12. 子孙: 以某节点为根的子树中任一节点都称为该节点的子孙。如上图:所有节点都是A的子孙
  13. 森林: 由m(m>0)棵互不相交的树的集合称为森林;

1.3 树的实现

树有很多种实现方式如:双亲表示法,孩子表示法、孩子双亲表示法以及孩子兄弟表示法
等。我们这里就简单的了解其中最常用的孩子兄弟表示法。

孩子兄弟表示法通常每个节点保存了指向其第一个孩子节点和其右兄弟节点的指针。

//兄弟表示法
struct TreeNode {int data; //用于保存节点的数据struct TreeNode* firstChild;   //指向第一个孩子节点的指针struct TreeNode* rightSibling; //指向右边一个兄弟节点的指针
};

结构图:
在这里插入图片描述
树在生活中有许多的应用:

  1. 文件系统: 文件系统通常以树的形式组织文件和目录。每个目录可以包含文件和子目录,形成了一个层次结构。

  2. 电子游戏中的场景图: 在游戏设计中,场景图常常以树结构表示游戏场景中的对象关系和层次。

  3. 组织结构: 公司或组织的层次结构可以使用树表示。每个节点可能代表一个部门,员工,或者项目。

  4. 决策树: 在机器学习中,决策树用于分类和回归分析,帮助模型做出决策。

  5. 图形学中的场景图: 用于表示3D场景中的对象关系,方便进行渲染和交互。


二、二叉树的概念及性质

2.1 二叉树的概念

二叉树是树的一种特殊情况,其中每个节点最多有两个子节点,分别是左子节点和右子节点。

在这里插入图片描述
从上图可以看出:

  1. 二叉树不存在度大于2的节点
  2. 二叉树的子树有左右之分,次序不能颠倒,因此二叉树是有序树

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


2.2 二叉树的性质

  1. 满二叉树: 如果每一个层的结点数都达到最大值,则这个二叉树就是满二叉树。也就是说,如果一个二叉树的层数为 k k k,且结点总数是 2 k − 1 2^k-1 2k1 ,则它就是满二叉树。
  2. 完全二叉树: 完全二叉树也是一种特殊的二叉树,它和满二叉树的主要区别在于,除了最后一层,其他层的节点都是紧凑排列的,而且最后一层的节点都尽量靠左排列。如果最后一层的节点没有填满,那么缺失的节点会从左到右依次排列。 要注意的是满二叉树是一种特殊的完全二叉树。

在这里插入图片描述

  1. 若规定根节点的层数为1,则一棵非空二叉树的第 i i i层上最多有 2 ( i − 1 ) 2^{(i-1)} 2(i1)个结点.
  2. 若规定根节点的层数为1,则深度为h的二叉树的最大结点数是 2 h − 1 2^h-1 2h1
  3. 若规定根节点的层数为1,具有n个结点的满二叉树的深度, h = l o g 2 ( n + 1 ) h= log_2(n+1) h=log2(n+1)
  4. 对于具有 n n n个结点的完全二叉树,如果按照从上至下从左至右的数组顺序对所有节点从0开始编号,则对于序号为i的结点有:
  • i > 0 i>0 i>0 i i i位置节点的双亲序号为 ( i − 1 ) / 2 (i-1)/2 (i1)/2 i = 0 i=0 i=0 i i i为根节点编号,无双亲节点
  • 2 i + 1 < = n 2i+1<=n 2i+1<=n,左孩子序号为 2 i + 1 2i+1 2i+1
  • 2 i + 2 < = n 2i+2<=n 2i+2<=n,右孩子序号为 2 i + 2 2i+2 2i+2

在这里插入图片描述
如果你喜欢这篇文章,点赞👍+评论+关注⭐️哦!
欢迎大家提出疑问,以及不同的见解。

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

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

相关文章

Multisim仿真实例(1-10)

本文分享10个常用电路&#xff0c;供大家参考学习&#xff0c;需要具体资料可以私聊我。 1、基于三极管的DC-AC全桥逆变电路 该电路利用脉冲控制Q1/Q3与Q2/Q4导通从而改变电流流过负载的方向&#xff0c;将直流信号逆变成交流信号。 电路图&#xff1a; 输入输出结果&#x…

springboot整合webservice使用总结

因为做的项目中用到了webservice,所以在此总结一下。 一、webservice简介 Web Service也叫XML Web Service, WebService是一种可以接收从Internet或者Intranet上的其它系统中传递过来的请求&#xff0c;轻量级的独立的通讯技术。是通过SOAP在Web上提供的软件服务&#xff0c;使…

solidity案例详解(七)复杂众筹合约

自己原创智能合约&#xff0c;有作业需求可加下面的图片中的裙 1、在 Remix 中&#xff0c;以 Account1 完成“众筹项目”合约的编译和部署。&#xff08;显示合约、函数、状态变量、结构体、事件的命名&#xff09; 2、在 Remix 中&#xff0c;以 Account2 完成“参与众筹”合…

Python电能质量扰动信号分类(四)基于CNN-BiLSTM的一维信号分类模型

往期精彩内容&#xff1a; 引言 1 数据集制作与加载 1.1 导入数据 1.2 制作数据集 2 CNN-BiLSTM分类模型和超参数选取 2.1定义CNN-BiLSTM分类模型 2.2 设置参数&#xff0c;训练模型 3 模型评估 3.1 准确率、精确率、召回率、F1 Score 3.2 十分类混淆矩阵&#xff1a…

C++多态性——(3)动态联编的实现——虚函数

归纳编程学习的感悟&#xff0c; 记录奋斗路上的点滴&#xff0c; 希望能帮到一样刻苦的你&#xff01; 如有不足欢迎指正&#xff01; 共同学习交流&#xff01; &#x1f30e;欢迎各位→点赞 &#x1f44d; 收藏⭐ 留言​&#x1f4dd; 成功的秘诀就在于多努力一次&#xff…

gookit/color - Go语言命令行色彩使用库教程

gookit/color - Go语言命令行色彩使用库教程 1.安装2.基础颜色(16-color)3.256色彩/RGB风格 1.安装 go get github.com/gookit/color2.基础颜色(16-color) 提供通用的API方法&#xff1a;Print Printf Println Sprint Sprintf 1、例如&#xff1a; color.Yellow.Println(&q…

嵌入式系统(二)单片机基础 | 单片机特点 内部结构 最小系统 电源 晶振 复位

上一篇文章我们介绍了嵌入式系统 嵌入式系统&#xff08;Embedded System&#xff09;是一种特定用途的计算机系统&#xff0c;它通常嵌入在更大的产品或系统中&#xff0c;用于控制、监测或执行特定的任务。这些系统通常由硬件和软件组成&#xff0c;旨在满足特定的需求&…

echarts条纹进度条

drawmonthqualified(){this.monthqualified echarts.init(document.getElementById(monthqualified));this.monthqualified.setOption({grid: {top: "15%",left:"20%",right:20%,bottom: "0%" //也可设置left和right设置距离来控制图表的大小},…

【致远OA】获取指定人员的协同待发列表

接口请求说明 V6.0接口更新:不在传入ticket&#xff0c;改为传memberId人员ID V6.0之前http请求方式&#xff1a;GET http://ip:port/seeyon/rest/affairs/draft 如 http://127.0.0.1/seeyon/rest/affairs/draft?ticketxxxxxx V6.0http请求方式&#xff1a;GET http://ip:p…

常见网络协议

1.DNS协议 &#xff08;域名系统&#xff09; DNS协议使用的端口号是53 位于OSI模型中的应用层 DNS系统的作用&#xff1a;将域名&#xff08;网址&#xff09;解析为IP地址。 DNS的基本原理是&#xff1a;将域名映射到IP地址 DNS工作流程 当用户给定一个域名&#xff0…

【十三】【动态规划】1745. 分割回文串 IV、132. 分割回文串 II、516. 最长回文子序列,三道题目深度解析

动态规划 动态规划就像是解决问题的一种策略&#xff0c;它可以帮助我们更高效地找到问题的解决方案。这个策略的核心思想就是将问题分解为一系列的小问题&#xff0c;并将每个小问题的解保存起来。这样&#xff0c;当我们需要解决原始问题的时候&#xff0c;我们就可以直接利…

移动端APP版本治理

1、背景 在许多公司&#xff0c;APP版本都是不受重视的&#xff0c;产品忙着借鉴&#xff0c;开发埋头编码&#xff0c;测试想着不粘锅。 只有在用户反馈app不能用的时候&#xff0c;你回复客服说&#xff0c;让用户升级最新版本&#xff0c;是不是很真实。 而且业界也很少有…

一文讲清数据资产入表实操

《中共中央 国务院关于构建数据基础制度更好发挥数据要素作用的意见》已发布一年&#xff0c;数据资产化和入表已成为2023年的热门话题&#xff0c;随着2023年底国家数据局吹风《"数据要素x"三年行动计划&#xff08;2024-2026年&#xff09;》即将发布&#xff0c;这…

开发环境 目录记录

2023.12.27 jdk17 位置在 C:\DevelopTools\JavaDevelopTools\jdk17,配置了JAVA_HOME到环境变量&#xff0c;JAVA_HOME\bin到PATHapache-maven-3.6.1 位置在 C:\DevelopTools\JavaDevelopTools\apache-maven-3.6.1,配置了MAVEN_HOME到环境变量&#xff0c;MAVEN_HOME\bin到PA…

模拟Spring事件监听机制

作者简介&#xff1a;大家好&#xff0c;我是smart哥&#xff0c;前中兴通讯、美团架构师&#xff0c;现某互联网公司CTO 联系qq&#xff1a;184480602&#xff0c;加我进群&#xff0c;大家一起学习&#xff0c;一起进步&#xff0c;一起对抗互联网寒冬 之前我们一起学习了Spr…

Maven下载和安装的详细教程

文章目录 一、Maven下载和安装1.1 下载 Maven1.2 配置环境变量 参考资料 一、Maven下载和安装 1.1 下载 Maven 打开 Maven 的官方网站Maven – Download Apache Maven&#xff0c;下载最新版本的 Maven 在可选择的版本中&#xff0c;不同版本的区别在于: binary是已经编译过的…

从零开始了解大数据(七):总结

系列文章目录 从零开始了解大数据(一)&#xff1a;数据分析入门篇-CSDN博客 从零开始了解大数据(二)&#xff1a;Hadoop篇-CSDN博客 从零开始了解大数据(三)&#xff1a;HDFS分布式文件系统篇-CSDN博客 从零开始了解大数据(四)&#xff1a;MapReduce篇-CSDN博客 从零开始了解大…

如何压缩图片?电脑图片压缩的方法

如果图片体积过大不仅会占用过多的内存&#xff0c;还容易在平时处理和上传的时候被限制&#xff0c;传输起来也比较慢&#xff0c;这个时候最简单的方法就是通过专业的图片处理工具压缩图片大小&#xff0c;现如今有许多在线处理工具可以选择&#xff0c;今天分享的压缩图就是…

模型融合之模型堆叠

一、理论 模型堆叠&#xff08;Model Stacking&#xff09;是一种集成学习的方法&#xff0c;其本质是将多个基学习器&#xff08;Individual Learner&#xff09;的预测结果作为新的特征&#xff0c;再训练一个元学习器&#xff08;Meta Learner&#xff09;来进行最终的预测。…

【JUC的四大同步辅助类】

文章目录 一、CountDownLatch二、CyclicBarrier三、Semaphore四、Phaser 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、CountDownLatch CountDownLatch如同火箭发射&#xff0c;计数只能不断减减&#xff0c;当到达0时即发射 场景示例&#xff1…