【数据结构】树和二叉树的介绍

在这里插入图片描述

文章目录

  • 前言
  • 一、树
    • 1.1 树的概念
    • 1.2 树的相关概念
    • 1.3 树的表示
    • 1.4 树的用途
  • 二、二叉树
    • 2.1 二叉树的概念
    • 2.2 两种特殊的二叉树
    • 2.3 二叉树的性质
    • 2.4 二叉树的存储方式
  • 总结


前言

树是一种让程序员们既爱又恨的数据结构。它就像是一棵大树,让你可以轻松地摘取其中的果实,但也让你不得不面对它茂密的枝叶和复杂的根系。如果你想要在编程领域中成为一名大师,那么你必须要学会如何在这片浓密的树林中游刃有余。所以,让我们开始探索这个神奇的世界吧!


一、树

1.1 树的概念

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

1.2 树的相关概念

为了方便之后对树的学习,以下概念需要理解并记忆

  1. 节点
    在这里插入图片描述

  2. 在这里插入图片描述

1.3 树的表示

在了解了树的定义及其相关概念后,我想你现在最好奇,该如何表示树呢?,有一位程序员大佬给出了其结构体。

typedef int DataType;
typedef struct TreeNode
{
struct TreeNode* FirstChild; // 第一个孩子结点
struct TreeNode* NextBrother; // 指向其下一个兄弟结点
DataType data; // 结点中的数据域
}TreeNode;

在这里插入图片描述
通过FirstChildNextBrother可以遍历到每一个节点


1.4 树的用途

根据树的结构,很容易想到树的一种用途:文件管理
在这里插入图片描述

树这种数据结构有以下几个常见的用处:

  1. 组织数据:树可以用来组织层次化的数据,例如文件系统、目录结构、XML/HTML文档等。这些数据可以被看作是树形结构,每个节点表示一个文件/目录/标签,子节点表示该节点下的子文件/子目录/子标签。

  2. 搜索和排序:二叉搜索树是一种基于树的数据结构,可以用来实现快速的搜索和排序。在二叉搜索树中,每个节点的值都大于其左子节点的值,小于其右子节点的值,因此可以用二分查找的方法来快速地查找数据。

  3. 算法设计:树是许多算法的基础,例如图遍历、最短路径、最小生成树等。通过对树的遍历和操作,可以解决许多复杂的问题。

  4. 数据压缩:霍夫曼树是一种基于树的数据结构,可以用来实现数据的压缩。在霍夫曼树中,每个叶子节点表示一个字符,其编码是从根节点到该节点的路径上的0和1的序列,根据字符在文本中出现的频率构建霍夫曼树,可以得到一种高效的压缩方式。

总之,树这种数据结构在计算机科学中应用广泛,是许多算法和数据结构的基础。


二、二叉树

2.1 二叉树的概念

二叉树是一种特殊的树形结构,

  • 每个节点最多只有两个子节点,分别被称为左子节点和右子节点。
  • 左子树和右子树都是二叉树。
  • 二叉树可以为空。
  • 二叉树的子树有左右之分,次序不能颠倒,因此二叉树是有序树。
    在这里插入图片描述
    在这里插入图片描述

2.2 两种特殊的二叉树

满二叉树:一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是满二叉树。
在这里插入图片描述

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


2.3 二叉树的性质

在这里插入图片描述

2.4 二叉树的存储方式

二叉树的存储方式:顺序存储和链式存储

顺序存储
顺序结构存储就是使用数组来存储,一般使用数组只适合表示完全二叉树,因为不是完全二叉树会有空间的浪费。而现实中使用中只有才会使用数组来存储。二叉树顺序存储在物理上是一个数组,在逻辑上是一颗二叉树。
注意:这里的指的是一种数据结构,而不是指内存的某一区域
在这里插入图片描述

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


总结

树是一种非常重要的数据结构,它可以帮助我们处理许多复杂的问题。
感谢您阅读本文。如果您觉得这篇文章对您有所帮助,不妨给我点个赞,这将是对我最大的鼓励。同时,如果您对本文还有任何疑问或建议,欢迎在评论区留言,我会尽力回答和改进。谢谢!

在这里插入图片描述

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

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

相关文章

【10】核心易中期刊推荐——模式识别与机器学习

🚀🚀🚀NEW!!!核心易中期刊推荐栏目来啦 ~ 📚🍀 核心期刊在国内的应用范围非常广,核心期刊发表论文是国内很多作者晋升的硬性要求,并且在国内属于顶尖论文发表,具有很高的学术价值。在中文核心目录体系中,权威代表有CSSCI、CSCD和北大核心。其中,中文期刊的数…

【C++进阶】C++11(中)左值引用和右值引用

文章目录左值引用左值引用的概念左值引用的使用右值引用右值引用的概念右值引用的使用左右值相互引用左值引用对右值进行引用右值引用对左值进行引用右值引用使用场景和意义左值引用的优势左值引用的短板右值引用的优势完美转发模板万能引用完美转发实际运用场景左值引用 左值…

vue3+ts 开发效率提升

1、vite pnpm项目初始化 pnpm: 比npm或yarn快10倍 pnpm与其他包管理器(如npm和Yarn)的不同之处在于它使用一种称为“硬链接”的独特安装方法。当你使用PNPM安装一个包时,它并不会将包的文件复制到每个项目的node_modules目录中&a…

图形视图界面 图形效果

Qt的标准图形效果类: QGraphicsBlurEffect提供模糊效果QGraphicsColorizeEffect提供染色效果QGraphicsDropShadowEffect提供阴影效果QGraphicsOpacityEffect提供透明效果 QGraphicsBlurEffect(模糊效果) 模糊效果会模糊源。此效果对于减少细…

VS Code工作区用法

背景VS Code可以通过"文件/打开文件夹"来打开本地项目,但是想要打开多个项目便需要来回切换,比较费劲。此时就可以使用工作区功能,将不同的项目放置到同一个工作区中,这样切换项目的时候就会非常方便。操作方法打开其中…

免费搭建个人博客

免费搭建个人博客,并发布到公网 利用hexo搭建个人博客,通过gitee的pages发布到公网 1 前置准备 安装git、安装node.js(尽量选择长期支持的版本) node.js官网:https://nodejs.org/en/ git官网:https://git-scm.com/book/zh/v2 安装…

如何衡量你的Facebook广告活动的成功

投入大量资金和资源在Facebook广告上并不总能带来预期的回报,这很可能是由于缺乏恰当的衡量广告活动成功的方法。在这篇文章中,我们将介绍一些关键的指标,帮助你更好地了解如何衡量你的Facebook广告活动的成功。1.费用每次点击(CP…

Spring和IDEA都不推荐用的@Autowired注解,为什么还有那么多人用?

Autowired的默认装配 我们都知道在spring中Autowired注解,是用来自动装配对象的。通常,我们在项目中是这样用的: package com.sue.cache.service;import org.springframework.stereotype.Service;Service public class TestService1 {publ…

你是否了解AR技术?AR技术就在我们身边

文章目录专栏导读1、前言2、AR技术原理3、游戏领域应用4、教育领域应用5、医疗领域应用6、零售领域应用专栏导读 ✍ 作者简介:i阿极,CSDN Python领域新星创作者,专注于分享python领域知识。 ✍ 本文录入于《数据分析之道》,本专栏…

C/C++每日一练(20230325)

目录 1. 搜索插入位置 🌟 2. 结合两个字符串 🌟 3. 同构字符串 🌟 🌟 每日一练刷题专栏 🌟 Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每日一练 专栏 1. 搜索插入位置 给定一个排序数…

CAN通信----电路图

CAN通信----基本原理 一、CAN总线网络连接 1.闭环总线网络----ISO11898 闭环总线网络高速、短距离,它的总线最大长度为 40m,通信速度最高为 1Mbps,总线的两端各要求有一个120 欧的电阻。 2.开环总线网络----ISO11519 开环总线网络低速、…

LeetCode394.字符串解码

LeetCode刷题记录 文章目录📜题目描述💡解题思路⌨C代码📜题目描述 给定一个经过编码的字符串,返回它解码后的字符串。 编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次。注意 k 保…

1652_MIT 6.828 shell例程重定向的实现分析

全部学习汇总: GreyZhang/g_unix: some basic learning about unix operating system. (github.com) 前面完成了一个单独命令执行之后,想放弃这个简单shell的实现。后来想想多少还是有几分不甘心,还是耐着心思把这个做完吧! 这次&…

基于pytorch+Resnet101加GPT搭建AI玩王者荣耀

本源码模型主要用了SamLynnEvans Transformer 的源码的解码部分。以及pytorch自带的预训练模型"resnet101-5d3b4d8f.pth"本资源整理自网络,源地址:https://github.com/FengQuanLi/ResnetGPT注意运行本代码需要注意以下几点 注意!&a…

多线程控制讲解与代码实现

多线程控制 回顾一下线程的概念 线程是CPU调度的基本单位,进程是承担分配系统资源的基本单位。linux在设计上并没有给线程专门设计数据结构,而是直接复用PCB的数据结构。每个新线程(task_struct{}中有个指针都指向虚拟内存mm_struct结构&am…

你真的掌握到“优先级队列“的精髓了吗?

前文如果我们给每个元素都分配一个数字来标记其优先级,不妨设较小的数字具有较高的优先级,这样我们就可以在一个集合中访问优先级最高的元素并对其进行查找和删除操作了。这样,我们就引入了优先级队列 这种数据结构。一,priority_…

QT/C++调试技巧:内存泄漏检测

文章目录内存泄漏方案一方案二:CRT调试定位代码位置方法1方法2其它问题方案三:使用vs诊断工具方案四:使用工具VLD(Visio Leak Detector)方案五Cppcheck内存泄漏 内存泄漏:指的是在程序里动态申请的内存在使…

STM32学习(八)

STM32串口与电脑USB口通信 特别注意:两个设备之间的TXD和RXD,必须交差连接,方可正常通信 RS-232异步通信协议 启动位:必须占1个位长,必须保持逻辑0电平。有效数据位:可选5、6、7、8、9个位长,L…

【嵌入式烧录/刷写文件】-1-详解Motorola S-record(S19/SREC/mot/SX)格式文件

目录 1 什么是Motorola S-record 2 Motorola S-record的格式 2.1 Motorola S-record的结构 2.1.1 “Record type记录类型”的说明 2.1.2 “Record length记录长度”的说明 2.1.3 如何计算“Checksum校验和” 2.2 Record order记录顺序 2.3 Text line terminator文本行终…

HTTP/2.x:最新的网页加载技术,快速提高您的SEO排名

2.1 http2概念HTTP/2.0(又称HTTP2)是HTTP协议的第二个版本。它是对HTTP/1.x的更新,旨在提高网络性能和安全性。HTTP/2.0是由互联网工程任务组(IETF)标准化的,并于2015年发布。2.2 http2.x与http1.x区别HTTP…
最新文章