初讲树,二叉数(搜索二叉树,实现的方法<链式,顺序>)

目录

1.树的概念及其结构

1.1树的概念

 1.2树相关的概念

1.3树的表示

2.二叉树概念及其结构

2.1概念

2.2现实中的二叉树 

2.3特殊的二叉树

  2.4二叉树的性质

2.5二叉树存储结构

2.5.1链式存储

2.5.2顺序存储

3.搜索二叉树


1.树的概念及其结构

1.1树的概念

树是一种非线性的结构,它是由N个数据的层次结构的集合,把它叫做树就是因为它的逻辑结构就像是一颗倒过来的树,它的根向上,叶子向下。

1.有一个特殊的节点称为根节点,根结点没有前驱结点

2.除根结点以外,其余M个结点被分为(M>0)个互不相交的集合T1,T2,T3......Tm,其中每个集合又是与结构相似的子树,每颗子树的根结点只有一个前驱,可以有0个或者多个后继

3.树是递归定义

 

注意:树形结构中子树之间不能有交集,否则就不是树形结构。

 1.2树相关的概念

  

1.结点的度:一个结点含有子树的个数称为该结点的度,如上图A的为6

2.叶结点或终端结点:度为0的结点称为叶子结点;如上图:B,C,H,I...等节点为叶子结点

3.非终端结点或分支结点:度不为0的结点;如上图D,   E,   F,   G ...等结点为分支结点

4.双亲结点或父结点:若一个结点有子结点,这个结点就成为这个节点的双亲结点或者父结点,如上图:A是B的父亲结点。

5.孩子结点或子结点:一个结点含有子树的结点称为该结点的子结点,如上图:B是A的孩子结点

6.兄弟结点:具有相同父结点的结点互称为兄弟结点,如上图:C是B的兄弟结点 

7.树的度:一颗树种最大结点的度称为树的度,如上图:树的度为6

8.结点的层次:从根开始,根为第一层,根的子结点为第二层,一次类推

9.树的高度或深度:树的结点的最大层次,如上图:树的高度为4

10.堂兄弟结点:双亲在同一层的结点互为堂兄弟结点,如上图:H,  I互为兄弟结点

11.结点的祖先:从根到该结点的所经分支上的所有结点;如上图所示:所有结点都是A的子孙

12.森林:有m(m>0)颗互不相交的树的集合称为森林

1.3树的表示

树的结构相比与线性结构就比较复杂了,要储存起来就比较麻烦了,既然保存值域,也要保存结点与结点之间的关系,实际树的很多种表示方式如:双亲表示法,孩子表示法,孩子双亲表示法以及孩子兄弟表示法,我们这里就了解最简单的孩子兄弟表示法

typedef int DataType;
struct Node
{
   struct Node* firstchild;    //第一个孩子结点
   struct Node* pnextbrother;  //下一个兄弟结点
   DataType _Data;             //该结点储存数据

}

 

2.二叉树概念及其结构

2.1概念

一棵二叉树是节点的一个有限集合,该集合:

1.或者为空

2.由一个根结点加上两个别称为左子树和右子树的二叉树组成

从上图可以看出:

1.二叉树不存在有度大于二的结点

2.二叉树的子树有左右结点之分,次序不能颠倒,因此二叉树是有序树

注意:对于任意二叉树都是由以下几种情况复合而成的:

2.2现实中的二叉树 

2.3特殊的二叉树

1.满二叉树:一个二叉树,如果每一层节点数都达到了最大值,则这个二叉树就是满二叉树。也就是说一个二叉树的层数为K,总结点的个数是{2_{}}^{k}-1,则它是满二叉树。

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

  2.4二叉树的性质

1.若规定根节点的层数是1,则一棵非空二叉树的第i层上最多有2^{\left ( i-1\right )}个结点

2.若规定根节点的层数是1,则深度为h的二叉树的最大结点数是2^{h}-1

3.对任何一个二叉树,如果度为0其叶结点个数为n_{0},度为二的结点分支个数为n_{2},则有n_{0} = n_{2}+1

3.若对规定根节点的层数是1,具有n个结点的满二叉树的深度\log_{2}\left ( n+1 \right )

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

       1.若i>0,i位置结点的双亲序号:\frac{\left ( i-1 \right )}{2},i=0,i为根节点编号,无双亲结点

       2.若2i+1<n,左孩子序号:2i+1,2i-1>=n否则无左孩子

       3.若2i+2<n,右孩子序号:2i+2,2i+2>=n否则无右孩子

2.5二叉树存储结构

想要实现二叉树的存储的话可以用到前面所学到两种存储方法链式存储和顺序存储 。

2.5.1链式存储

我们对每个结点设立两个指针一个左孩子一个右孩子同时存储数据。

typedife int DataNode

struct Node
{ 
     struct Node *lifechild;
     struct Node *rightchild; 
     DataNode val;
}

我们还有三叉链的结构会出现多一个指针指向双亲结点 。

typedife int DataNode

struct Node
{ 
     struct Node *lifechild;
     struct Node *rightchild; 
     struct Node*parent;
     DataNode val;
}

结合下面图片来看可以跟好的理解逻辑结构。  

2.5.2顺序存储

我们可以运用到前面的2.4中的第四点的结论,我们可以利用他们在顺序表中的编号来确定它们相互之间的关系,结构上是一个数组实际逻辑上是一个二叉树

3.搜索二叉树

搜索二叉树是一种特殊的二叉树,它的特点在于每一个结点的左结点总是小于右结点且右子树大于它的双亲结点。这里只是简单说一下不做多余的讲解。

它的结构如下图所示:

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

从零入门激光SLAM(十六)——卡尔曼滤波基础

一、卡尔曼滤波简介KF 卡尔曼滤波器&#xff08;Kalman Filter&#xff09;是一种用于估计动态系统状态的递归算法。它通过结合系统的动态模型和噪声观测数据&#xff0c;提供对系统状态的最优估计。卡尔曼滤波器广泛应用于信号处理、控制系统、导航、计算机视觉等领域。 卡尔…

无人机超强教程!无人机图像拼接、航拍植被动态定量化研究、激光雷达地形测量与河网水系提取

查看原文>>>无人机生态环境监测、图像处理与GIS数据分析综合实践技术应用 目录 一、无人机航拍基本流程、航线规划与飞行实践 二、无人机图像拼接软件的学习与操作实践 三、无人机图像拼接典型案例详解 四、无人机图像拼接数据在GIS中的处理与分析 五、无人机图…

Leaflet【二】图层绘制——UI图层【点线面】 矢量图层【img、svg】

layer图层 在leaflet当中使用图层比OL当中简便一点&#xff0c;我们创建的layer图层可以直接通过 addTo 方法加到地图上&#xff0c;不需要通过layer、source再去做一些区分&#xff0c; 图标 Icon 创建Marker时提供的一个Icon 详细配置–>go // 导入一张图片作为图标imp…

python放烟花的代码

以下是一个简单的Python烟花大会的代码示例。这个代码使用Python的turtle模块来绘制烟花&#xff0c;并使用随机函数来生成烟花的路径和颜色。 python import turtle import random # 设置画布和画笔 canvas turtle.Screen() canvas.bgcolor("black") pen turtle.…

光伏电站设备数据采集

随着全球对可再生能源的关注度日益提升&#xff0c;光伏电站作为绿色能源的重要组成部分&#xff0c;其运营效率和稳定性显得尤为重要。在光伏电站的日常管理中&#xff0c;设备数据采集是一项至关重要的工作&#xff0c;它直接关系到电站的运行状态、故障预警以及能源产出的优…

人工智能创新领衔,Android系统如虎添翼:2024 Google I/O 大会深度解析

人工智能创新领衔&#xff0c;Android系统如虎添翼&#xff1a;2024 Google I/O 大会深度解析 2024年5月14日举行的Google I/O大会&#xff0c;犹如一场精彩的科技盛宴&#xff0c;吸引了全球的目光。大会上&#xff0c;谷歌发布了一系列重磅产品和技术更新&#xff0c;展现了…

揭秘!国产电路仿真软件新星闪耀,让电路设计更智能!

在数字化时代&#xff0c;电路设计与仿真软件的重要性日益凸显。随着科技的飞速发展&#xff0c;国产电路仿真软件也逐渐崭露头角&#xff0c;成为行业内的佼佼者。今天&#xff0c;我们就来揭秘这些国产电路仿真软件的新星&#xff0c;看看它们是如何让电路设计变得更加智能、…

上位机图像处理和嵌入式模块部署(树莓派4b的低成本方案)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 前面我们说过树莓派4b的替代版本和提高版本&#xff0c;其实还有一种方案&#xff0c;那就是树莓派4b的超低版本方案。国内开发板soc这块&#xff…

如何看固态硬盘是否支持trim功能?固态硬盘开启trim数据还能恢复吗

随着科技的飞速发展&#xff0c;固态硬盘&#xff08;SSD&#xff09;已成为电脑存储的主流选择。相较于传统的机械硬盘&#xff0c;固态硬盘以其高速读写和优秀的耐用性赢得了广泛好评。而在固态硬盘的众多功能中&#xff0c;TRIM功能尤为关键&#xff0c;它能有效提升固态硬盘…

机器人工具箱学习(三)

一、动力学方程 机器人的动力学公式描述如下&#xff1a; 式中&#xff0c; τ \boldsymbol{\tau} τ表示关节驱动力矩矢量&#xff1b; q , q ˙ , q \boldsymbol{q} ,\; \dot{\boldsymbol { q }} ,\; \ddot{\boldsymbol { q }} q,q˙​,q​分别为广义的关节位置、速度和加速…

Python代码:十二、格式化输出(2)

1、描述 牛牛、牛妹和牛可乐都是Nowcoder的用户&#xff0c;某天Nowcoder的管理员希望将他们的用户名以某种格式进行显示&#xff0c; 现在给定他们三个当中的某一个名字name&#xff0c;请分别按全小写、全大写和首字母大写的方式对name进行格式化输出&#xff08;注&#x…

关于毫、微、纳、皮

千分之一称为“毫”(m)&#xff0c;即10^(-3) “毫”的千分之一称为“微”( μ)&#xff0c;即10^(-6) “微”的千分之一称为“纳”( n)&#xff0c;即10^(-9) “纳”的千分之一称为“皮”( p)&#xff0c;即10^(-12) 另外&#xff1a; 千倍为“千”(K) 千倍的千倍称为“…

Echarts仪表盘实现半球带圆点

效果图&#xff1a; 代码如下&#xff1a; <template><div><!-- 图表 --><div class"echart-box" id"main"></div></div> </template> <script setup> import * as echarts from "echarts"; …

CSP认证刷题笔记(3)最大矩形(13年CSP认证第三题)

文章目录 题目描述基本思路求解代码 题目描述 在横轴上放了n个相邻的矩形&#xff0c;每个矩形的宽度是1&#xff0c;而第i&#xff08;1≤i≤n&#xff09;个矩形的高度是 hi。这n个矩形构成了一个直方图。例如&#xff0c;下图中六个矩形的高度就分别是3,1,6,5,2,3。 请找出…

【面试干货】一个数组的倒序

【面试干货】一个数组的倒序 1、实现思想2、代码实现 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 1、实现思想 创建一个新的数组&#xff0c;然后将原数组的元素按相反的顺序复制到新数组中。 2、代码实现 package csdn;public class…

Go语言不再难!跟随ChatGPT轻松攻克编程难关

开发人员&#xff08;包括我在内&#xff09;通常偏好边学习边实践的方式。这不仅仅是我与LLM协作的核心准则之一&#xff0c;也是最关键的准则&#xff1a;因为你是在任务导向的学习过程中积累知识&#xff0c;这种学习方式不是预先的——它基于实时的、可感知的情境。 当资深…

管道光电液位传感器有哪些特点

管道光电液位传感器具有多项独特特点&#xff0c;使其在水管缺水检测领域广受欢迎。管道光电液位传感器采用光学感应原理&#xff0c;利用光线在水与空气中的折射率不同来感知水位的变化。这种原理使得传感器无需任何机械运动&#xff0c;大大延长了其寿命&#xff0c;并且不易…

连绕下线和掏把下线

这里的连绕下线和掏把下线讲的是线不剪断的接法&#xff01; 这里还是以一路串联为例子&#xff0c;一相4组线圈 &#xff0c;4组线圈就需要3根套管&#xff0c;3相就需要9根套管 如下图 绕这一相4组线圈的时候&#xff0c;就已经放好一定大小的3根套管&#xff01; 这个只试…

计算机网络学习记录 数据链路层 Day3 (上)

计算机网络学习记录 数据链路层 Day3&#xff08;上&#xff09; 你好,我是Qiuner. 为记录自己编程学习过程和帮助别人少走弯路而写博客 这是我的 github https://github.com/Qiuner gitee https://gitee.com/Qiuner 如果本篇文章帮到了你 不妨点个赞吧~ 我会很高兴的 &#x1…

【手势识别-UISwipeGestureRecognizer轻扫 Objective-C语言】

一、接下来,我们来说这个,轻扫的手势, 1.轻扫,比如说,就是从右往左滑一下,从左往右滑一下,这个叫轻扫,不是清洁的清啊,是轻轻的轻,不是那个清扫垃圾的清啊,好,这是轻扫啊,swipe, 好,然后呢,在这个里边呢,首先,3步,也是一样的, 1)创建手势对象 2)为哪一…