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

在这里插入图片描述

文章目录

  • 前言
  • 一、树
    • 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.kler.cn/a/3678.html

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

相关文章

基于 Docker 的深度学习环境:入门篇

这篇文章聊聊如何从零到一安装、配置一个基于 Docker 容器的深度学习环境。 写在前面 这段时间,不论是 NLP 模型,还是 CV 模型,都得到了极大的发展。有不少模型甚至可以愉快的在本地运行,并且有着不错的效果。所以,经…

【LeetCode】链表练习 9 道题

第一题&#xff1a;移除链表元素 题目描述&#xff1a; 给你一个链表的头节点head和一个整数val&#xff0c;请你删除链表中所有满足Node.val val的节点&#xff0c;并返回新的头节点 。 列表中的节点数目在范围 [0, 10^4] 内1 < Node.val < 500 < val < 50 /…

从零开始学OpenCV——图像灰度变换详解(线性与非线性变换)

文章目录图像灰度变化灰度变换介绍灰度线性变换灰度分段线性变换图像点运算灰度非线性变换线性点运算灰度的非线性变换&#xff1a;对数变换灰度的非线性变换&#xff1a;伽马变换灰度的非线性变换&#xff1a;对比拉伸灰度的非线性变换&#xff1a; S形灰度变换灰度的非线性变…

小程序逆向工程:这个开源的小程序逆向工具真不错,2023年亲测成功

前言 安全部门的大哥又双叒叕报了一个小程序的高危漏洞&#xff0c;他使用逆向工程破解了加密信心&#xff0c;用抓包修改了请求参数。又是头疼的一天… 想成为一名微信小程序的开发者&#xff0c;前端思路的学习和安全意识是非常有必要的&#xff0c;故务必掌握小程序反编译…

使用txt编写Java代码并通过cmd命令执行

文章目录前言一、创建一个.txt文件二、编写Java代码三、保存文件四、打开cmd命令窗口五、通过cmd命令编译生成.class文件六、通过cmd命令运行代码前言 若要用cmd命令执行Java文件&#xff0c;首先我们需要在机器上配置好JDK环境 在此附上JDK1.8安装文档超详细JDK1.8安装与配置 …

计算机网络笔记——物理层

计算机网络笔记——物理层2. 物理层2.1 通信基础2.1.1 信号2.1.2 信源、信道及信宿2.1.3 速率、波特及码元2.1.4 带宽2.1.5 奈奎斯特定理采样定理奈奎斯特定理2.1.6 香农定理2.1.7 编码与调制调制数字信号调制为模拟信号模拟数据调制为模拟信号编码数字数据编码为数字信号模拟数…

【python实操】年轻人,别用记事本保存数据了,试试数据库吧

为什么用数据库&#xff1f; 数据库比记事本强在哪&#xff1f; 答案很明显&#xff0c;你的文件很多时候都只能被一个人打开&#xff0c;不能被重复打开。当有几百万数据的时候&#xff0c;你如何去查询操作数据&#xff0c;速度上要快&#xff0c;看起来要清晰直接 数据库比我…

【数据结构与算法】堆与堆排序

目录一.堆的实现1.堆的概念2.堆的代码实现二.堆排序的讲解一.堆的实现 1.堆的概念 堆是一种数据结构&#xff0c;首先它总是一颗完全二叉树(因为堆适合表示完全二叉树)&#xff0c;在逻辑上堆是一颗完全二叉树&#xff0c;真正实现上是使用数组来实现的。根据不同的规则(任意…

【算法基础】一篇文章彻底弄懂Dijkstra算法|多图解+代码详解

博主简介&#xff1a;努力学习的大一在校计算机专业学生&#xff0c;热爱学习和创作。目前在学习和分享&#xff1a;算法、数据结构、Java等相关知识。博主主页&#xff1a; 是瑶瑶子啦所属专栏: 算法 &#xff1b;该专栏专注于蓝桥杯和ACM等算法竞赛&#x1f525;近期目标&…

【linux】深入了解TCP与UDP

认识端口号 端口号(port)是传输层协议的内容. 端口号是一个2字节16位的整数; 端口号用来标识一个进程, 告诉操作系统, 当前的这个数据要交给哪一个进程来处理; IP地址 端口号能够标识网络上的某一台主机的某一个进程; 一个端口号只能被一个进程占用理解 "端口号" 和…

数据结构MySQL —— 索引

目录 一、索引概述 二、索引结构 三、索引分类 四、索引语法 五、SQL性能分析 1. 查看执行频次 2. 慢查询日志 3. show profiles指令 4. explain执行计划 六、索引使用规则 1. 验证索引效率 2. 最左前缀法则 3. 范围查询 4. 索引失效情况 5. SQL提示 6. …

记录springboot+vue+fastdfs实现简易的文件(上传、下载、删除、预览)操作

前言说明&#xff1a;springboot vue FastDFS实现文件上传&#xff08;支持预览&#xff09;升级版 FASTDFS部分 FASTDFS安装过程&#xff1a;基于centos 7安装FastDFS文件服务器 SpringBoot部分 springboot源码实现 package com.core.doc.controller;import com.baomid…

Spring Boot集成RocketMQ实现普通、延时、事务消息发送接收、PULL消费模式及开启ACL | Spring Cloud 30

一、前言 在前面我们通过以下章节对RocketMQ有了基础的了解&#xff1a; docker-compose 搭建RocketMQ 5.1.0 集群&#xff08;双主双从模式&#xff09; | Spring Cloud 28 docker-compose 搭建RocketMQ 5.1.0 集群开启ACL权限控制 | Spring Cloud 29 现在开始我们正式学习…

LORA: LOW-RANK ADAPTATION OF LARGE LAN-GUAGE MODELS

Paper name LORA: LOW-RANK ADAPTATION OF LARGE LAN-GUAGE MODELS Paper Reading Note Paper URL: https://arxiv.org/pdf/2106.09685.pdf Code URL: huggingface 集成&#xff1a; https://github.com/huggingface/peft官方代码&#xff1a; https://github.com/microsof…

C++11新特性

C11新特性 1统一列表初始化 1.1{} 在C98中&#xff0c;标准允许使用花括号{}对数组或者结构体元素进行统一的列表初始值设定。 C11扩大了用大括号括起的列表(初始化列表)的使用范围&#xff0c;使其可用于所有的内置类型和用户自定义的类型&#xff0c;**使用初始化列表时&…

安全防御之入侵检测篇

目录 1.什么是IDS&#xff1f; 2.IDS和防火墙有什么不同&#xff1f;3.IDS的工作原理&#xff1f; 4.IDS的主要检测方法有哪些&#xff1f;请详细说明 5.IDS的部署方式有哪些&#xff1f; 6.IDS的签名是什么意思&#xff1f;签名过滤器有什么用&#xff1f;例外签名的配置作…

【数据结构】栈与队列:后进先出与先进先出到底是啥?

&#x1f451;专栏内容&#xff1a;数据结构⛪个人主页&#xff1a;子夜的星的主页&#x1f495;座右铭&#xff1a;日拱一卒&#xff0c;功不唐捐 文章目录一、前言二、栈的概念1、定义2、操作三、栈的实现1、定义2、栈的初始化3、栈的销毁4、栈的判空5、查看栈顶元素6、入栈与…

vue3 解决各场景 loading过度 ,避免白屏尴尬!

Ⅰ、前言 当我们每次打卡页面&#xff0c;切换路由&#xff0c;甚至于异步组件&#xff0c;都会有一个等待的时间 &#xff1b;为了不白屏&#xff0c;提高用户体验&#xff0c;添加一个 loading 过度动画是 非常 常见的 &#xff1b;那么这几种场景我们应该把 loading 加在哪…

C语言番外-------《函数栈帧的创建和销毁》知识点+基本练习题+完整的思维导图+深入细节+通俗易懂建议收藏

绪论 书接上回&#xff0c;上回我们已经将C语言的所有知识点进行了总结归纳到同一个思维导图中&#xff0c;而本章是一个番外篇&#xff0c;将具体讲述一些更深入的知识。 话不多说安全带系好&#xff0c;发车啦&#xff08;建议电脑观看&#xff09;。 附&#xff1a;红色&…

软件架构常用设计

一、分层架构1.四层架构&#xff1a;分层架构&#xff08;layered architecture&#xff09;是最常见的软件架构&#xff0c;也是事实上的标准架构。如果你不知道要用什么架构&#xff0c;那就用它。这种架构将软件分成若干个水平层&#xff0c;每一层都有清晰的角色和分工&…
最新文章