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

目录

前言

一、树的定义

二、树的若干术语

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.mzph.cn/pingmian/9156.shtml

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

相关文章

SPA模式下的多页面跳转原理及实现

jQuery Mobile在SPA模式下的多页面跳转原理及实现案例 文章目录 jQuery Mobile在SPA模式下的多页面跳转原理及实现案例前言一、SPA的实现原理和代码分析1.实现原理说明(1)index.html(2)index.js(3)page2.ht…

前端css中线性渐变(linear-gradient)的使用

前端css中线性渐变 一、前言二、关键词句三、主要内容说明(一)、线性渐变方向1.角度调整方向2.负值角度,源码13.源码1运行效果4.关键字调整方向5.to right向右线性渐变,源码26.源码2运行效果 (二)、线性渐变…

初识C语言——第十六天

C语言中的语句结构类型:顺序/选择/循环 分支语句 if else switch 循环语句 while for do whlie goto语句 代码练习:找两个整数的最大公约数和最小公倍数 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h>//int main() //{ // int age 60; // if (ag…

YOLOv5-7.0改进(三)添加损失函数EIoU、AlphaIoU、SIoU、WIoU、MPDIoU、NWD

前言 损失函数的改进一直是涨点的重要技巧&#xff0c;本篇博客将使用六个不同损失函数对算法进行改进&#xff0c;并绘制出改进结果对比图~ 往期回顾 YOLOv5-7.0改进&#xff08;一&#xff09;MobileNetv3替换主干网络 YOLOv5-7.0改进&#xff08;二&#xff09;BiFPN替换…

基士得耶CP 6303c速印机不制版故障检修

故障&#xff1a;基士得耶CP 6303c经常提示版纸卡纸&#xff0c;重设版纸 版纸还没下滚筒&#xff0c;卡在版纸仓里面,手动滚动裁纸刀可以解决&#xff0c;但第二天又是这个毛病&#xff1b; 版纸定位传感器的灵敏度调节一下,然后给机器全面做个清洁大保养&#xff0c;尤其是传…

网工内推 | 技术支持工程师,最高15k,加班有补贴

01 星网信通 招聘岗位&#xff1a;售前技术支持 职责描述&#xff1a; 1、售前技术支持&#xff1a;技术交流、产品选型报价、方案制作等工作&#xff1b; 2、招投标支持&#xff1a;项目招标参数撰写、标书质疑、应标文件技术部分撰写及资质文件归纳准备、现场讲标及技术澄清…

vue路由知识补充(updating···)

1路由守卫中的next() next()方法表示放行&#xff0c;如果不执行此方法路由不会跳转&#xff0c;此方法可以接收一个参数 字符串路径&#xff1a;如果传递一个字符串路径&#xff0c;那么路由会重定向到该路径。 next(/home); 路由对象&#xff1a;如果传递一个路由对象&…

leetcode尊享面试——二叉树(python)

250.统计同值子树 使用dfs深度搜索&#xff0c;同值子树&#xff0c;要满足三个条件&#xff1a; 对于当前节点node&#xff0c;他的左子树血脉纯净&#xff08;为同值子树&#xff09;&#xff0c;右子树血脉纯净&#xff08;为同值子树&#xff09;&#xff0c;node的值等于…

Windows系统下修改文件夹和U盘图标实战

文章目录 知识学习一、修改磁盘图标第一步、新建.INF文件第二步、放置图标第三步、重新插入U盘第四步、隐藏与显示文件知识拓展 二、修改文件夹图标设置图标样式恢复图标样式 在日常办公中使用的是windows系统&#xff0c;系统默认的文件图标都一样&#xff0c;不利于分类整理&…

电商核心技术揭秘52:数字化内容营销创新

相关系列文章 电商技术揭秘相关系列文章合集&#xff08;1&#xff09; 电商技术揭秘相关系列文章合集&#xff08;2&#xff09; 电商技术揭秘相关系列文章合集&#xff08;3&#xff09; 电商技术揭秘四十一&#xff1a;电商平台的营销系统浅析 电商技术揭秘四十二&#…

【C++】继承 — 继承的引入、赋值切片详细讲解

前言 我们知道C语言是一门面向对象编程的语言&#xff0c;而面向对象编程有三大特性&#xff0c;它们分别是&#xff1a; 封装继承多态 目录 1. 继承的概念及定义1.1继承的概念1.2继承的定义格式1.3 继承的使用 2 基类和派生类对象赋值转换3 继承中的作用域3.1 派生类对象的存…

Linux下安装snaphu

1、官网下载安装包 2、解压&#xff0c;移动文件夹到/usr/local/下 3、在/usr/local/下创建man&#xff0c;在man下创建man1文件夹 4、进入到snaphu的src文件夹里&#xff0c;执行sudo make&#xff0c;如果报错 在这个 Makefile 中&#xff0c;-arch x86_64 是 macOS 特定的…

【Linux】-Linux用户和权限[3]

一、认知root用户 1、root用户&#xff08;超级管理员&#xff09; 无论是Windows、MacOS、Linux均采用多用户的管理模式进行权限管理。 在Linux系统中&#xff0c;拥有最大权限的账户为&#xff1a;root&#xff08;超级管理员&#xff09; root用户拥有最大的系统操作权限…

Android MediaCodec 简明教程(七):使用 MediaCodec 解码到 OES 纹理上

系列文章目录 Android MediaCodec 简明教程&#xff08;一&#xff09;&#xff1a;使用 MediaCodecList 查询 Codec 信息&#xff0c;并创建 MediaCodec 编解码器Android MediaCodec 简明教程&#xff08;二&#xff09;&#xff1a;使用 MediaCodecInfo.CodecCapabilities 查…

【qt】QString字符串

前言&#xff1a; 这节很轻松&#xff0c;大家可以放心食用 ♪(&#xff65;ω&#xff65;)&#xff89; QString目录 一.与cString的区别二.隐式共享三.初始化四.判断是否为空串五.字符串的长度六.添加字符串1.尾加2.任意位置加 七.替换字符串八.修改字符串九.删除字符串1.清…

【C语言项目】贪吃蛇(上)

个人主页 ~ gitee仓库~ 欢迎大家来到C语言系列的最后一个篇章–贪吃蛇游戏的实现&#xff0c;当我们实现了贪吃蛇之后&#xff0c;我们的C语言就算是登堂入室了&#xff0c;基本会使用了&#xff0c;当然&#xff0c;想要更加熟练地使用还需要多多练习 贪吃蛇 一、目标二、需要…

(八)JSP教程——application对象

application对象是一个比较重要的对象&#xff0c;服务器在启动后就会产生这个application对象&#xff0c;所有连接到服务器的客户端application对象都是相同的&#xff0c;所有的客户端共享这个内置的application对象&#xff0c;直到服务器关闭为止。 可以使用application对…

MGRE 实验

需求&#xff1a;1、R2为ISP&#xff0c;其上只能配置IP地址。 2、R1-R2之间为HDLC封装 3、R2-R3之间为ppp封装&#xff0c;pap认证&#xff0c;R2为主认证方。 4、R2-R4之间为ppp封装&#xff0c;chap认证&#xff0c;R2为主认证方。 5、R1、R2、R3构建MGRE环境&#xff0…

sourceTree push失败

新电脑选择commit and push&#xff0c;报错了&#xff0c;不过commit成功&#xff0c;只不过push失败了。 原因是这个&#xff0c;PuTTYs cache and carry on connecting. 这里的ssh选择的是 PuTTY/Plink&#xff0c;本地没有这个ssh密钥&#xff0c;改换成openSSH&#xff…

Windows电脑搭建HarmonyOS NEXTDeveloper Preview2环境详解

Windows电脑搭建HarmonyOS NEXTDeveloper Preview2环境详解&#xff1a; HarmonyOS NEXT Preview系列教程基于Api11讲解-IT营大地老师 1 、电脑要求以及注意事项 操作系统 &#xff1a; Windows10 64 位、 Windows11 64 位 内存 &#xff1a; 8GB 及以上&#xff0c;推荐 16G…