树与二叉树(概念篇)

news2024/11/26 19:52:15

树与二叉树

  • 1 树的概念
    • 1.1 树的简单概念
    • 1.2 树的概念名词
    • 1.3 树的相关表示
  • 2 二叉树的概念
    • 2.1 二叉树的简单概念
      • 2.1.1 特殊二叉树
    • 2.2 二叉树的性质
    • 2.3 二叉树的存储结构

1 树的概念

1.1 树的简单概念

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

  • 树有一个特殊的节点,称为根节点,根节点没有前驱节点
  • 除根节点外,其余节点被分成M(M>0)个互不相交的集合T1、T2、……、Tm,其中每一个集合Ti(1<=i<=m)又是一棵结构与树类似的子树。这样的每棵子树的根节点有且只有一个前驱,可以有0个或多个后继节点。
  • 由此可见,树是递归定义
    注意:树形结构中,子树之间不能有交集(不能成环),否则就不是树形结构
    在这里插入图片描述
    除了根节点外,每个节点有且只有一个父节点,所以可以得出:一棵N个节点的树有N-1条边

1.2 树的概念名词

在这里插入图片描述

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

1.3 树的相关表示

树形结构相对线性结构就比较复杂了,要存储表示起来也就比较麻烦了。既要保存值域,也要保存节点和节点之间的关系。实际中树有很多种表示方式,如:双亲表示法,孩子表示法,孩子双亲表示法以及孩子兄弟表示法等。但最常用的还是孩子兄弟表示法
可将上图中树的结构用孩子兄弟表示法转化,如下图所示:
在这里插入图片描述
孩子兄弟表示法是用于将任意一棵普通的树转化为二叉树的最有效方法,其节点的结构定义大致如下:

typedef int DataType;
struct Node
{
	struct Node* _pfirstChild; // 第一个孩子结点
	struct Node* _pNextBrother; // 指向其下一个兄弟结点
	DataType _data; // 结点中的数据域
};

2 二叉树的概念

2.1 二叉树的简单概念

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

  1. 或者为空
  2. 或者由一个根节点加上两棵别称为左子树和右子树的二叉树组成
    在这里插入图片描述
    从上图可以看出:
  1. 二叉树不存在度大于2的节点
    二叉树的子树有左右之分,次序不能颠倒,因此二叉树是有序树

所以可得出,对于任意的二叉树都是由以下几种情况组合构成的:
在这里插入图片描述

2.1.1 特殊二叉树

  1. 满二叉树:一个二叉树,如果每一层的节点数都达到最大值,则这个二叉树就叫做满二叉树。也就是说,如果一棵树的高度为h,且节点总数为 2 h − 1 2^h-1 2h1,则它就是满二叉树。
  2. 完全二叉树:完全二叉树是一种效率很高的数据结构。完全二叉树是由满二叉树引出来的。对于高度为h的,有n个节点的树,当且仅当其每一个节点都与高度为h的满二叉树中编号从1至n的节点都一一对应时,才被称之为完全二叉树。要注意的是满二叉树是一种特殊的完全二叉树。

在这里插入图片描述

2.2 二叉树的性质

  1. 若规定根节点的层数为1,则一棵非空二叉树的第i层上最多有 2 ( i − 1 ) 2^{(i-1)} 2(i1)个节点
  2. 若规定根节点的层数为1,则高度为h的二叉树的最大节点数是 2 h − 1 2^h-1 2h1
  3. 对于任意一棵二叉树,如果度为0的叶节点个数是 n 0 n_0 n0度为2的分支结点个数是 n 2 n_2 n2则有 n 0 = n 2 + 1 n_0=n_2+1 n0=n2+1
  4. 若规定根节点的层数是1,则具有n个节点的满二叉树的高度 h = l o g 2 ( n + 1 ) h=log_2(n+1) h=log2(n+1)
  5. 对于具有n个节点的完全二叉树,如果按照从上至下从左至右的数组顺序对所有节点从0开始编号,则对于序号为i的节点有:

若i>0,i节点位置的双亲序号为:(i-1)/2;若i=0,i为根结点序号,无双亲节点。
若2*i+1<n,则 i 节点位置的左孩子序号为:2*i+1(2*i+1>=n时无左孩子)
若2*i+2<n,则 i 节点位置的右孩子序号为:2*i+2(2*i+2>=n时无右孩子)

2.3 二叉树的存储结构

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

  1. 顺序结构存储
    顺序结构存储就是使用数组来存储。但数组存储一般只适合表示完全二叉树,因为不是完全二叉树会有空间的浪费。实际使用中只有(属于完全二叉树)才会使用数组来存储。二叉树顺序存储在物理上是一个数组,在逻辑上是一棵二叉树。
  2. 链式结构存储
    二叉树的链式存储结构是指,用链表来表示一棵二叉树,即用链来指示节点间的逻辑关系。通常的方法是链表中的每个节点由三个域组成:数据域和左右指针域。左右指针分别用来存放该节点左孩子和右孩子所在的链节点的地址。链式结构又分为二叉链和三叉链。简单的一般二叉链就够了,更复杂的数据结构如红黑树等会用到三叉链。

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

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

相关文章

OpenCV入门(三)快速学会OpenCV2图像处理基础(一)

OpenCV入门&#xff08;三&#xff09;快速学会OpenCV2图像处理基础&#xff08;一&#xff09; 1.颜色变换cvtColor imgproc的模块名称是由image&#xff08;图像&#xff09;和process&#xff08;处理&#xff09;两个单词的缩写组合而成的&#xff0c;是重要的图像处理模…

【Error: ImagePullBackOff】Kubernetes中Nginx服务启动失败排查流程

❌pod节点启动失败&#xff0c;nginx服务无法正常访问&#xff0c;服务状态显示为ImagePullBackOff。 [rootm1 ~]# kubectl get pods NAME READY STATUS RESTARTS AGE nginx-f89759699-cgjgp 0/1 ImagePullBackOff 0 103…

Python(青铜时代)——容器类的公共方法

内置函数 内置函数&#xff1a;不需要使用 import 导入库&#xff0c;就可以直接使用的函数 函数描述备注len(&#xff09;计算容器中元素个数del( )删除变量max( )返回容器中元素最大值如果是字典&#xff0c;只针对key比较min( )返回容器中元素最小值如果是字典&#xff0c…

《MySQL系列-主从相关》Windows生产服务器和Linux备份服务器实现“主从备份功能“

Windows生产服务器和Linux备份服务器实现"主从备份功能" 经测试&#xff0c;Windows服务器和Linux服务器是可以实现主从备份的。为了实现对Windows数据库的备份功能&#xff0c;而目前只有Linux服务器了&#xff0c;所以在Linux服务器上部署从库&#xff0c;实现主从…

[算法]计数排序和基数排序

参考&#xff1a;《漫画算法-小灰的算法之旅》 目录 一、计数排序 1、计数排序的过程 2、计数排序的局限性 3、计数排序代码 二、基数排序 1、基数排序思想 2、例子 3、解决对齐问题 4、基数排序代码 三、两者的时间复杂度和空间复杂度 一、计数排序 1、计数排序的过…

Windows环境下实现设计模式——观察者模式(JAVA版)

我是荔园微风&#xff0c;作为一名在IT界整整25年的老兵&#xff0c;今天总结一下Windows环境下如何编程实现观察者模式&#xff08;设计模式&#xff09;。不知道大家有没有这样的感觉&#xff0c;看了一大堆编程和设计模式的书&#xff0c;却还是很难理解设计模式&#xff0c…

【python实操】用python写软件弹窗

文章目录前言组件label 与 多行文本复选框组件Radiobutton单选组件Frame框架组件labelframe标签框架列表框Listboxscrollbar滚动条组件scale刻度条组件spinbox组件Toplevel子窗体组件PanedWindow组件Menu下拉菜单弹出菜单总结针对组件前言 python学习之路任重而道远&#xff0…

P6入门:创建项目计划工作分解结构WBS

目录 引言 Primavera P6 中的自顶向下方法 工作分解结构

LeetCode:1590. 使数组和能被 P 整除

记录一下今天遇到的每日一题&#xff0c;很绕&#xff0c;还需要考虑很多细节 思路 遍历数组&#xff0c;找出数组除余p之后余下的数字k&#xff0c;需要寻找的子数组也需要满足除余p之后余k。 找出所有满足的子数组&#xff0c;求出最短长度。 具体求子数组&#xff0c;求出…

CI/CD | 不可忽略的Jenkins基础架构修复问题

在系列文章第一篇和第二篇中&#xff0c;大家已经看到了在CloudBees的帮助下&#xff0c;让管理Jenkins解决方案从一个大麻烦变成轻而易举就能解决的事情。但是&#xff0c;现在让我们反思并退一步。有时候&#xff0c;这些问题并不是表面上的——它们是在成长的过程中造成的&a…

yyds,Elasticsearch Template自动化管理新索引创建

文章目录一、什么是Elasticsearch Template&#xff1f;二、Elasticsearch Template的用法2.1、创建模板2.2、验证模板2.3、应用模板2.4、删除模板2.5、组合模板2.6、如何在同一个模板中定义多种匹配模式2.7、模板优先级2.8、提前模拟索引的最终映射三、Elasticsearch Template…

Python多线程详解

文章目录1. 多线程2. 创建线程2.1 直接创建2.2 继承创建3. 守护线程4. 阻塞线程5. 线程锁5.1 互斥锁(Lock)5.2 递归锁(RLock)5.3 信号量(Semaphore)5.4 事件(Event)6. ThreadLocal7. 线程池7.1 基本使用7.2 as_completed 方法7.3 wait方法7.4 map方法8. Python线程真相参考文章…

linux时间的特殊用法

今天介绍linux下Date时间命令相关的特殊用法 date (当前的时间) 修改系统当前时间&#xff1a; date -s "2022-6-20 9:33:50" 昨天的时间是我们比较常用的&#xff1a; date -d "yesterday" %Y%m%d ( 昨天的时间) date -d "1 day ago" %Y%m%d …

如何写一个简单的爬虫

学习爬虫重要的是知识储备以及实战能力&#xff0c;最近有个学妹要求我帮她写一个爬虫程序&#xff0c;我将我编写的爬虫代码以及解释都记录下来&#xff0c;方便后期更多的伙伴们学习参考。 前置知识-爬虫定义 爬虫指的是一种自动化程序&#xff0c;用于在互联网上获取和抓取…

VB6换个思路解决微信下载文件只读的问题(含源码)

日期&#xff1a;2023年3月10日 作者&#xff1a;Commas 签名&#xff1a;(ง •_•)ง 积跬步以致千里,积小流以成江海…… 注释&#xff1a;如果您觉得有所帮助&#xff0c;帮忙点个赞&#xff0c;也可以关注我&#xff0c;我们一起成长&#xff1b;如果有不对的地方&#xf…

Android Framework——zygote 启动 SystemServer

概述 在Android系统中&#xff0c;所有的应用程序进程以及系统服务进程SystemServer都是由Zygote进程孕育&#xff08;fork&#xff09;出来的&#xff0c;这也许就是为什么要把它称为Zygote&#xff08;受精卵&#xff09;的原因吧。由于Zygote进程在Android系统中有着如此重…

docker使用教程(装linux比虚拟机方便)

目录 一、介绍 二、使用 1.下载操作系统 2.查看docker内的容器有哪些 3. 运行指定容器 4.进入容器 ​1.attach进入容器&#xff08;输入容器ID前4位&#xff09; 2.exec进入容器&#xff08;可以输入ID或者NAMES&#xff09; 5.退出容器 6.在宿主机器和容器之间拷贝文…

时间同步Chrony

时间同步chrony一、Chrony时间服务1、Chrony介绍2、Chrony优点二、配置Chrony服务三、验证一、Chrony时间服务 1、Chrony介绍 chrony 是基于NPT协议的实现时间同步服务&#xff0c;它既可以当做服务端&#xff0c;也可以充当客户端。chrony是ntp的代替品&#xff0c;能更精确…

数据传输服务DTS(阿里巴巴)

数据传输服务DTS(阿里巴巴) 什么是数据传输服务DTS 数据传输服务DTS&#xff08;Data Transmission Service&#xff09;是阿里云提供的实时数据流服务&#xff0c;支持关系型数据库&#xff08;RDBMS&#xff09;、非关系型的数据库&#xff08;NoSQL&#xff09;、数据多维分…

CentOS 7 使用 Composer 配置 phpmyadmin 并管理多个mysql

phpMyAdmin 中文文档 准备工作 CentOS 7 yum 方式安装 phpCentOS 7 安装 Apache HTTP Server安装Composer 安装 phpMyAdmin 按照官方文档 用Composer安装 要安装phpMyAdmin&#xff0c;只需运行&#xff1a; composer create-project phpmyadmin/phpmyadmin 建立网站配置文…