想要学会二叉树?树的概念与结构是必须要掌握的!快进来看看吧

news2025/1/16 16:05:00

目录

1.树的概念及结构

1.1什么是树?

1.2树的相关术语

1.3树的表示

2.二叉树的概念及结构

2.1二叉树的概念

2.2两种特殊的二叉树

2.3二叉树的性质 

2.4二叉树的存储结构

2.4.1 顺序存储

2.4.2 链式存储


1.树的概念及结构

1.1 什么是树?

树是一种非线性的数据结构,它是由 n(n>=0)个有限节点组成的一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。

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

从图中可以看出:

▶ 子树是不相交的;

▶ 除了根节点外,每个节点有且仅有一个父节点;

▶ 一颗N个节点的树有N-1条边。

1.2 树的相关术语

 节点的度:一个节点含有的子树的个数称为该节点的度; 如上图:A的为6;

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

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

双亲节点或父节点:若一个节点含有子节点,则这个节点称为其子节点的父节点; 如上图:A是B的父节点;

孩子节点或子节点:一个节点含有的子树的根节点称为该节点的子节点; 如上图:B是A的孩子节点;

兄弟节点:具有相同父节点的节点互称为兄弟节点; 如上图:B、C是兄弟节点;
树的度:一棵树中,最大的节点的度称为树的度; 如上图:树的度为6;

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

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

堂兄弟节点:双亲在同一层的节点互为堂兄弟;如上图:H、I互为兄弟节点;

节点的祖先:从根到该节点所经分支上的所有节点;如上图:A是所有节点的祖先;

子孙:以某节点为根的子树中任一节点都称为该节点的子孙。如上图:所有节点都是A的子孙;

森林:由m(m>0)棵互不相交的树的集合称为森林;

1.3 树的表示

树结构相对线性表就比较复杂了,要存储表示起来就比较麻烦了,既要保存值域,也要保存结点和结点之间的关系,实际中树有很多种表示方式如:双亲表示法,孩子表示法、孩子双亲表示法以及孩子兄弟表示法等。例如孩子表示法:

typedef int dataType;

typedef struct Node
{
	struct Node* left;    //指向左孩子节点
	struct Node* right; //指向右孩子节点
	dataType data;       //存储数据的数据域
}Node;

2.二叉树的概念及结构

2.1 二叉树的概念

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

1.或者为空;

2.由一个根节点和两棵别称为左子树和右子树的二叉树组成。

需要注意的是:

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

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

3.左子树和右子树同样也都是二叉树,同样有根节点和左右子树的概念。

2.2 两种特殊的二叉树

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

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

2.3 二叉树的性质 

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

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

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

4. 若规定根节点的层数为1,具有 n 个结点的满二叉树的深度,h=log(n+1)(ps: 底数为2);

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

     1. 若i>0,i位置节点的双亲序号:(i-1)/2;i=0,i为根节点编号,无双亲节点;

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

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

2.4 二叉树的存储结构

二叉树一般可以使用两种结构存储,一种顺序结构,一种链式结构。

2.4.1 顺序结构

顺序结构存储就是使用数组来存储,一般使用数组只适合表示完全二叉树,因为不是完全二叉树会有空间的浪费。而现实中使用中只有堆才会使用数组来存储,关于堆我们后面的章节会专门讲解。二叉树顺序存储在物理上是一个数组,在逻辑上是一颗二叉树。

2.4.2 链式结构

二叉树的链式存储结构是指,用链表来表示一棵二叉树,即用链来指示元素的逻辑关系。 通常的方法是链表中每个结点由三个域组成,数据域和左右指针域,左右指针分别用来给出该结点左孩子和右孩子所在的链结点的存储地址 。链式结构又分为二叉链和三叉链,当前我们学习中一般都是二叉链。

结构定义:

typedef int dataType;

typedef struct Node
{
	struct Node* left;    //指向左孩子节点
	struct Node* right; //指向右孩子节点
	dataType data;       //存储数据的数据域
}Node;

逻辑结构:

最后,树的概念及结构已经介绍完毕。后面两章将为大家带来二叉树的顺序结构实现与二叉树的链式结构实现。

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

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

相关文章

【JavaSE专栏6】Java 基本类型转换、包装类、自动装箱、自动拆箱

作者主页&#xff1a;Designer 小郑 作者简介&#xff1a;Java全栈软件工程师一枚&#xff0c;来自浙江宁波&#xff0c;负责开发管理公司OA项目&#xff0c;专注软件前后端开发&#xff08;Vue、SpringBoot和微信小程序&#xff09;、系统定制、远程技术指导。CSDN学院、蓝桥云…

SpringBoot05:员工管理系统

先不连接数据库&#xff0c;后面整合了mybatis再补充 步骤&#xff1a; 1、导入静态资源 下载地址&#xff1a;下载 - KuangStudy 2、在pojo包下写实体类 ①Department //部门表 Data AllArgsConstructor NoArgsConstructor public class Department {private Integer id;…

IPV4地址详解

文章目录IPV4地址分类编址划分子网无分类编制CIDR路由聚合应用规划&#xff08;子网划分的细节&#xff09;定长的子网掩码FLSM变长的子网掩码VLSMIPV4地址 IPV4地址就是给因特网&#xff08;Internet&#xff09;上的每一台主机&#xff08;或路由器&#xff09;的每一个接口…

恶意代码分析实战 2 动态分析基础技术

2.1 Lab3-1 使用动态分析基础技术来分析在Lab03-01.exe文件中发现的恶意代码。 问题 找出这个恶意代码的导入函数与字符串列表。 C:\Documents and Settings\Administrator>strings Lab03-01.exe ExitProcess kernel32.dll ws2_32 cksu advapi32 ntdll user32 StubPath SO…

39.Isaac教程--使用 Pose CNN 解码器进行 3D 物体姿态估计

使用 Pose CNN 解码器进行 3D 物体姿态估计 ISAAC教程合集地址: https://blog.csdn.net/kunhe0512/category_12163211.html 文章目录使用 Pose CNN 解码器进行 3D 物体姿态估计应用概述推理模块Pose CNN 解码器训练模块Pose CNN 解码器架构Pose CNN解码器训练从场景二进制文件生…

JAVA BIO与NIO、AIO的区别

1、 IO模型发展 在Java的软件设计开发中&#xff0c;通信架构是不可避免的&#xff0c;我们在进行不同系统或者不同进程之间的数据交互&#xff0c;或者在高并发下的通信场景下都需要用到网络通信相关的技术&#xff0c;对于一些经验丰富的程序员来说&#xff0c;Java早期的网…

通信原理简明教程 | 现代数字调制

文章目录1 多进制基带信号2 多进制数字调制2.1 多进制调制的基本原理2.2 MPSK调制3 MSK3.1 MSK信号的表示3.2 MSK的相位网格图3.3 MSK的产生和解调4 QAM4.1 QAM的基本原理4.2 QAM信号的产生和解调4.3 QAM信号的特性5 正交频分复用5.1 OFDM的基本思想5.2 OFDM的基本原理5.3 基于…

Python基础学习 -- 常用模块

一、time模块1、时间戳可以理解为是一个计算机世界的当前时间&#xff0c;很多加密验证什么的&#xff0c;都会用到import time ttime.time() print(int(t)) 运行结果&#xff1a; 16732534522、当前时间import time ttime.strftime("%Y-%m-%d %X") print(t) 运行结果…

vue项目搭建(offline方式)

项目搭建的前提 需要安装node.js&#xff0c;安装步骤可参考https://blog.csdn.net/qq_44628230/article/details/122634132 1.检查环境是否已准备好 2.全局安装vue-cli 3.进入到项目目录&#xff0c;创建一个基于 webpack 模板的新项目&#xff08;online&#xff09; 4.由…

JavaScript笔记+案例

前端开发 第四节JavaScript JavaScript&#xff1a;概要 概要&#xff1a; JavaScript&#xff0c;是一门编程语言。浏览器就是JavaScript语言的解释器。 DOM和BOM 相当于编程语言内置的模块。 例如&#xff1a;Python中的re、random、time、json模块等。jQuery 相当于是编程…

搭建代理服务器

搭建代理服务器搭建代理服务器场景ccproxy进行搭建代理服务器proxifier配置代理服务器总结搭建代理服务器 有这种情况&#xff0c;在家需要访问某个内网环境&#xff0c;但是内网的ip从外网是访问不到的&#xff0c;这种需要怎么处理呢&#xff1f; 答案是使用代理服务器。 …

索引失效原因

目录 1.最佳左前缀法则 2.不在索引列上做任何操作 3.存储引擎不能使用索引中范围条件右边的列 4.尽量使用覆盖索引 5.mysql 在使用不等于(! 或者<>)的时候无法使用索引会导致全表扫描 6..is null ,is not null 也无法使用索引 7.like以通配符开头(%abc...)mysql索…

tkinter布局详解

文章目录placepackgrid前情提要&#xff1a; Python UI 界面 tkinter初步Tkinter共有三种布局方案&#xff0c;分别是绝对位置布局 place&#xff0c; 相对位置布局 pack和网格布局 grid。place place是通过声明具体位置来进行布局的方法&#xff0c;这个具体位置既可以绝对坐…

【大数据管理】Java实现布谷鸟过滤器(CF)

实现布谷鸟过滤器&#xff0c;每当有一个小说被存储后将其加入布谷鸟过滤器&#xff0c;并能够使用布谷鸟过滤器查询上述小说是否已经被存储 一、解题思路 在介绍布谷鸟过滤器之前&#xff0c;首先需要了解布谷鸟哈希的结构。最简单的布谷鸟哈希结构是一维数组结构&#xff0…

JAVA基础知识05面向对象

目录 面向对象概述 为什么要学习面向对象&#xff1f; 1. 类和对象 1.1 类的介绍 1.2 类和对象的关系 组织代码 1.3 类的组成 1.4 创建对象和使用对象的格式 2. 对象内存图 2.1 单个对象内存图 2.2 两个对象内存图 3. 成员变量和局部变量 4. this 关键字 4.1 t…

【c语言进阶】结构体最常用知识点大全

&#x1f680;write in front&#x1f680; &#x1f4dc;所属专栏&#xff1a;c语言学习 &#x1f6f0;️博客主页&#xff1a;睿睿的博客主页 &#x1f6f0;️代码仓库&#xff1a;&#x1f389;VS2022_C语言仓库 &#x1f3a1;您的点赞、关注、收藏、评论&#xff0c;是对我…

【电动车】基于多目标优化遗传算法NSGAII的峰谷分时电价引导下的电动汽车充电负荷优化研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

使用Redission和Aop以及注解实现接口幂等性

关于什么是接口幂等性这里不再赘述&#xff0c;本文将使用分布式锁来解决接口幂等性的问题。 本文接口幂等判断标准&#xff1a; String name IP 请求方式 URI 参数摘要值 当相同的name来临时&#xff0c;且上一个相同name对于的接口还未正常执行完毕&#xff0c;则判断为…

Python ·信用卡欺诈检测【Catboost】

Python 信用卡欺诈检测【Catboost】 提示&#xff1a;前言 Python 信用卡欺诈检测 提示&#xff1a;写完文章后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录Python 信用卡欺诈检测【Catboost】前言一、导入包二、加载数据三、数据可视化四、…

鱼雷的发射角设置

过年嘛 放松个五六天啥的 玩了个猎杀潜航的游戏觉得那玩意挺有意思的开年了 要美赛 写个设置鱼雷发射角的小程序玩玩 游戏嘛,反正大概简易版就是这个框架,自己补充呗 各种设定啥的,没怎么关心,就是总结一下里面的平面几何..水个文章玩玩顺便练习一下pptx绘图美赛的时候估计还是…