数据结构与算法之树和二叉树的一些概念和性质

目录

前言

一、树的定义

二、树的若干术语

1.结点的度

2.叶子

3.双亲与孩子

4.兄弟

5.祖先

6.树的度

7.结点的层次

8.树的深度

9.有序树和无序树

10.森林

三、树的逻辑结构

四、树的存储结构

1.顺序存储

2.链式存储

五、二叉树

1.定义

2.二叉树的五种状态

3.树和二叉树之间的转换

1.树转二叉树

2.二叉树转树

六、二叉树的性质

七、参考资料


前言

        这边博客主要是介绍树和二叉树。

一、树的定义

        树是由n(n>=0)个结点组成的有限集合T,如果n>0,并且满足两个条件:

  1. 有且仅有一个结点称为根(root)
  2. 当n>1的时候,其余的结点分为几个互不相交的有限集合,每个集合本身又是颗树,被称为这个根的子树。

二、树的若干术语


图1.树

1.结点的度

        结点的度也就是当前节点的子结点的个数。

        例如在上图中A结点的度为3,B结点的度为2,H结点的度为1。

2.叶子

        度为0的结点。

3.双亲与孩子

        E是B的孩子,E是K和L的父结点

4.兄弟

        B、C、D为兄弟结点

5.祖先

        M的祖先结点为H、D、A

6.树的度

        树中最大结点的度

7.结点的层次

        根结点是第一层,根的结点为第二层,依次类推

8.树的深度

       树的深度指的是从根节点到树中任意节点的最长路径的长度。换句话说,树的深度是根节点到最深层节点的路径的长度。

9.有序树和无序树

        左右结点不能变的树为有序树,反之称为无序树。

10.森林

        两个或者两个以上的树组成森林

三、树的逻辑结构

        一个结点可能有多个直接后继,但只有一个直接前驱,且子树之间互不相交。

四、树的存储结构

1.顺序存储

    按照从上到下、从左到右的顺序存储。

    我们在结点和结点的双亲结点的个数存储树的信息。

     图2.树的顺序存储结构

    顺序存储有个缺点:我们需要存储所有的结点信息,当树只有左节点或者右节点的时候,我们需要再顺序表的位置补充好多个空节点,这样会造成存储空间的浪费,而且操作很不方便。依次我们一般使用顺序存储表示完全二叉树。

2.链式存储

        我们使用链表存储树。这样也有一个问题,表示树的指针的个数是不确定的。        

图3.使用链表存储树

        有没有更好的办法呢,答案是有的,我们可以把树转成二叉树来存储。

五、二叉树

1.定义

        二叉树或为空树,或是由一个根结点加上两棵分别称为左子树和右子树的互不相交的二叉树组成。

2.二叉树的五种状态

图4.二叉树的五种状态

3.树和二叉树之间的转换

1.树转二叉树

        长子作为左孩子节点,兄弟节点作为右结点。

        方法:加线(兄弟相连)-- 抹线(长兄为父)--旋转

        以图1的树为例。第一步我们把结点的长子作为二叉树的左节点,其余的兄弟结点作为右结点。

        操作之后,树的形状为下图5

图5.长子作为左结点,兄弟结点作为右结点

        然后旋转兄弟结点。旋转之后的二叉树为下图6

图6.树转二叉树

2.二叉树转树

        和上述树转二叉树的顺序相反即可。

六、二叉树的性质

图7.二叉树的第一个性质

图8.二叉树的第二个性质

图9.二叉树的第三个性质

图10.二叉树的第四个性质

图11.二叉树的第五个性质

七、参考资料

数据结构(c语言 第2版 严蔚敏)

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

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

相关文章

美食推荐网站设计

**中文摘要:**在当今信息化、网络化的时代背景下,美食文化正逐渐融入人们的日常生活,而网络平台成为人们获取美食信息、分享美食体验的重要途径。为了满足广大美食爱好者对美食信息的探索和推荐需求,本文提出了一种创新的美食推荐…

OS复习笔记ch5-3

引言 上一节我们学习了关于信号量机制的一些内容,包括信号量的含义,对应的PV操作等。 如图所示,上一节主要是针对信号量的互斥,其实信号量机制还可以做很多事情,比如实现进程同步和前驱关系,这一节我们先复…

Selenium 自动化 —— 常用的定位器(Locator)

什么是定位器 定位器(Locator)是识别DOM中一个或多个特定元素的方法。 也可以叫选择器 Selenium 通过By类,提供了常见的定位器。具体语法如下: By.xxx("");我们选择单个元素时可以使用findByElement: Web…

ICode国际青少年编程竞赛- Python-2级训练场-坐标与列表练习

ICode国际青少年编程竞赛- Python-2级训练场-坐标与列表练习 1、 for i in range(6):Spaceship.step(Item[i].x - Spaceship.x)Dev.step(Item[i].y - Dev.y)Dev.step(Spaceship.y - Dev.y)2、 for i in range(5):Spaceship.step(Item[i].x - Spaceship.x)Flyer[i].step(Item[…

【MySQL数据库开发设计规范】之基础规范

欢迎点开这篇文章,自我介绍一下哈,本人笔名姑苏老陈,是一个JAVA开发老兵。 本文收录于 《MySQL数据库开发设计规范》专栏中,该专栏主要分享一些关于MySQL数据库开发设计相关的技术规范文章,定期更新,欢迎关…

《ESP8266通信指南》11-Lua开发环境配置

往期 《ESP8266通信指南》10-MQTT通信(Arduino开发)-CSDN博客 《ESP8266通信指南》9-TCP通信(Arudino开发)-CSDN博客 《ESP8266通信指南》8-连接WIFI(Arduino开发)(非常简单)-CSD…

机器学习(三) ----------线性回归算法(梯度下降+正则化)

目录 1 定义 2 损失函数(回归) 2.1 最小二乘函数(Least Squares Function) 2.2 均方误差(Mean Squared Error, MSE) 2.3 均方根误差(Root Mean Squared Error, RMSE) 2.4 平均绝…

自动驾驶纵向控制算法

本文来源——b站忠厚老实的老王,链接:忠厚老实的老王投稿视频-忠厚老实的老王视频分享-哔哩哔哩视频 (bilibili.com),侵删。 功率和转速之间的关系就是:功率P等于转矩M乘以转速ω。并不是油门越大加速度就越大。 发动机和电机的转…

GDAL:Warning 1: All options related to creation ignored in update mode

01 警告说明 首先贴出相关代码: out_file_name Rs_{:4.0f}{:02.0f}.tiff.format(year, month) out_path os.path.join(out_dir, out_file_name) mem_driver gdal.GetDriverByName(MEM) mem_ds mem_driver.Create(, len(lon), len(lat), 1, gdal.GDT_Float32) …

掌握用户全生命周期数据,Xinstall让App投放更科学

在数字化时代,App已成为企业与用户互动的重要窗口。然而,想要让App在众多竞争者中脱颖而出,吸引并留住用户,有效的广告投放策略至关重要。这就需要对广告投放效果进行精准分析,以便及时调整策略,实现最大化…

Kubernetes的基本概念

目录 一.基本内容 1.定义 2.作用 二.特性 1.弹性伸缩 2.自我修复 3.服务发现和负载均衡 4.自动发布(默认滚动发布模式)和回滚 5.集中化配置管理和密钥管理 6.存储编排,支持外挂存储并对外挂存储资源进行编排 7.任务批处理运行 三…

clickhouse mergeTree表引擎解析

参照 https://clickhouse.com/docs/zh/engines/table-engines/mergetree-family/mergetree https://clickhouse.com/docs/en/optimize/skipping-indexes Clickhouse中最强大的表引擎当属MergeTree(合并树)引擎及该系列(*MergeTree&#xff…

Springboot项目使用redis实现session共享

1.安装redis,并配置密码 这里就不针对于redis的安装约配置进行说明了,直接在项目中使用。 redis在windows环境下安装:Window下Redis的安装和部署详细图文教程(Redis的安装和可视化工具的使用)_redis安装-CSDN博客 2…

图片公式识别@文档公式识别@表格识别@在线和离线OCR工具

文章目录 abstract普通文字识别本地软件识别公式扩展插件下载小结 在线识别网站/API👺Quicker整合(推荐)可视化编辑和识别公式其他多模态大模型识别图片中的公式排版 开源模型 abstract 本文介绍免费图片文本识别(OCR)工具,包括普通文字识别,公式识别,甚至是手写公…

Linux网络——自定义序列化与反序列化

前言 之前我们学习过socket之tcp通信,知道了使用tcp建立连接的一系列操作,并通过write与read函数能让客户端与服务端进行通信,但是tcp是面向字节流的,有可能我们write时只写入了部分数据,此时另一端就来read了&#x…

ZYNQ MPSoC zcu102 PS端运行helloworld

文章目录 一、参考资料二、需要注意的步骤三、运行结果 一、参考资料 1.zcu102 zynq Mpsoc uart hello world——CSDN博客 2.zcu102自学 —— 第一个实验 (纯PS 串口打印 Hello world)——CSDN博客 3.【02】ALINX Zynq MPSoC XILINX FPGA视频教程 SDK 裸…

Linux:进程信号(一)信号的产生

目录 一、信号是什么? 二、Linux信号 三、信号处理方式 四、信号的产生 1、 通过终端按键产生信号 2、调用系统函数向进程发信号 3、 硬件异常产生信号 一、信号是什么? 在生活中,有许多信号,比如红绿灯,下课铃声…

如何使用Transformer-TTS语音合成模型

1、技术原理及架构图 ​ Transformer-TTS主要通过将Transformer模型与Tacotron2系统结合来实现文本到语音的转换。在这种结构中,原始的Transformer模型在输入阶段和输出阶段进行了适当的修改,以更好地处理语音数据。具体来说,Transformer-TT…

【Docker】新手教程的第一个demo:Wordpress

1 任务简单介绍 WordPress是什么: 是一个常用博客软件简单易部署,只需要两个容器(业务容器 数据库容器) 本文借鉴博客,使用自建 WordPress 容器方法在Docker上部署Wordpress,本地环境为Mac时使用该博客…

C语言leetcode刷题笔记2

C语言leetcode刷题笔记2 第4题:283.移动零互换直接移动 第5题:122.买卖股票的最佳时机‖递归(超时)动态规划贪心算法 第6题:49.字母异位词分组优化 第4题:283.移动零 给定一个数组 nums,编写一…
最新文章