我是一棵“树”

转载自 我是一棵“树”

 

我是一颗树,之前我们数据结构家族中的一个小朋友——“栈” 已经给你们介绍过的我们这个家族了(我是一个“栈”)。之所以叫栈为小朋友,是因为我和他的爸爸——数组是平辈的。

之所以存在我们这样一个家庭,最主要的原因是数组他们家庭虽然很强大,但是有一定的局限性。大家都知道,无论是数组、链表以及他们家的那几个小娃娃(栈、队列)等,存储的数据之间都只有简单的前后顺序关系。

既然说到这了,那就在给你们科普一下整个数据结构大家族吧。毕竟你们认识的那个“栈”只是个小晚辈,对我们家族的历史什么的都不是很了解。

数据结构家族

数据结构,主要有两个作用,第一个是存储数据,第二个是可以反应所存储的数据之间的逻辑关系,注意,逻辑关系并不是他们在计算机中存储的物理位置关系哦。所以,根据大家存储的数据的逻辑结构的不同,主要可以分为这个几个大的分支:

  • 集合 

他们家帮别人存储的数据之间什么关系都没有,唯一的关系可能就是同处于同一个集合了。

  • 线性结构

    他们家呢,帮别人存储的数据之间是有顺序的,数据之间在逻辑上是首尾相接的连续保存的。所以,元素之间存在着一对一的关系。比如你们认识的数组家族,就是线性结构的。

  • 树形结构 

嘿,这就是我们的家族分支啦,我们存储元素存在着一对多的相互关系。

  • 图形结构 

图形结构分支是一种复杂的数据结构。数据元素间的关系是任意的。任意两个数据元素间均可相关联。

大家了解的数组、队列、栈、链表他们都属于线性结构的分支的。今天的主角,也就是我和我的“树”家族是树形结构这个大的分支中的。

也许你已经猜到了,我是整个数据结构大家族的树形结构这一分支的族长。作为一个庞大的家族分支,我们当然具备整个数据结构家族的基本功能——数据存储。另外,整个树形分支主要用来保存具有树形结构的数据集合。说的白一点,就是我们帮别人存储的数据是有层次关系的。就像自然界中的一颗倒置的树一样。

先来说下找我们保存数据的一些限制和要求吧。我们帮别人保存的每个元素我们称之为节点,而我们一般有一个特定的结点被称为根节点,其余的结点都叫非根节点。下面给你看一颗标准的树,然后通过这张图,再来介绍下什么是叶节点、父节点等概念。

H节点是O和L的父节点,O和L是H节点的子节点。

H节点是根节点,因为他没有父节点。 

I、S和L节点是叶结点,因为他们没有子节点。 

I和S是兄弟节点,因为他们的父节点都是O节点。

好了,说好了这些了,该带你见一见我的家族成员了。作为数据结构的树家族的大家族,我有很多后代。先来给你看下我的家谱:

我有两个儿子:大儿子有序树、小儿子无序树。大儿子是家族的顶梁柱,承担起了家族的很多工作。而我的小儿子,就是一个比较自由的孩子,无忧无虑的什么也不管,所以大家有时候也叫他自由树。

先来说说这个我十分宠爱的小儿子——无序树。

 

无序树

无序树,他也是个树形结构,除了树中的父子节点之间有关系以外,同一个父节点的所有子节点之间是没关系的,在树中,这种关系就是顺序,比如谁在前谁在后。所以,他叫无序树。另外,我的这个小儿子由于太过自由,至今都没给我生出个娃娃来。所以,我的小儿子是个孤家寡人。

再来详细说说他的数据存储方面的事情,前面说了,他存储的数据之间只有父子节点间有关系。如果你让他帮你存储A、B、C三个数据的话,1个父节点,2个子结点的情况有 3 种。

无论两个子节点位置关系如何,都是同一棵树。即A-B-C和A-C-B被认为是同一棵树。

 

有序树

再来介绍一下我的大儿子,整个树家的顺位继承人。他真的做到了一个长子应该做的所有事情,他和他的孩子们几乎包揽了树家族的所有工作内容。

他和无序树的区别比较明显,就是在有序数中,子节点之间是有顺序关系的。如果你让我的大儿子帮你存储A、B、C三个数据的话,1个父节点,2个子结点的情况有 6 种。

只要两个节点的顺序掉换一下,又是一个新的树。A-B-C和A-C-B被认为是两棵不同的树。

从上面的家族图谱中可以发现,我的大儿子有序树也有很多孩子的。其中我比较出名的三个孙子分别是二叉树、霍夫曼树和B树等。

现在的年轻人,都很有个性的,帮别人存储数据的时候都有很多要求呢,不过也好,年轻人嘛,就应该有点性格。也得益于他们的各自的特性,树家族才能如此强大。

关于有序树的几个晚辈的介绍,后面让他们自己来吧,我这把老骨头说了这么多也累了。

 

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

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

相关文章

pycharm前进、后退快捷键

https://blog.csdn.net/jamieblue1/article/details/89087064 pycharm前进、后退快捷键 jamieblue1 2019-04-08 13:45:17 13663 收藏 4 分类专栏: 其他 文章标签: python pycharm 版权 前进/回退到上一个操作的地方win: 后退 ctrlalt&l…

判断字符串相等能否用==

为什么呢? 是因为比较的是两个对象的内存地址,我们知道变量被创建的时候就相当于在内存中开辟空间,而案例中str和str1就是占用的两块不同的空间,所以他们的内存地址是不一致的,在用符号判断的时候就不相等了&#xff0…

数据库 wifi探针数据量太大了

https://www.cnblogs.com/showcase/p/11654045.html https://www.cnblogs.com/showcase/p/11654045.html 橱窗外的小孩 在完成任务的同时,还需要不断“复盘”,不论你多么的忙,都需要留下时间思考,可以思考哪些地方做的好&#x…

CoreCLR源码探索(一) Object是什么

.Net程序员们每天都在和Object在打交道如果你问一个.Net程序员什么是Object,他可能会信誓旦旦的告诉你"Object还不简单吗,就是所有类型的基类"这个答案是对的,但是不足以说明Object真正是什么 在这篇文章我们将会通过阅读CoreCLR的…

分布式的CAP理论

转载自 分布式的CAP理论 CAP理论概述 2000年7月,加州大学伯克利分校的Eric Brewer教授在ACM PODC会议上提出CAP猜想。2年后,麻省理工学院的Seth Gilbert和Nancy Lynch从理论上证明了CAP。之后,CAP理论正式成为分布式计算领域的公认定理。 一…

使用navicat 复制 数据库 使用mysql5.7 utf8mb4 utf8mb4_general_ci 爬虫的时候就支持表情包了

使用mysql5.7 utf8mb4 utf8mb4_general_ci 爬虫的时候就支持表情包了 mysql8.0差别有点大 将python_spider 完整的复制到python_spider_copy上面 1.右键选中python_spider 选择数据传输 默认传输所有表,你可以进行选择 工具里面的数据…

设计爬虫Hawk背后的故事

本文写于圣诞节北京下午慵懒的午后。本文偏技术向,不过应该大部分人能看懂。 五年之痒 2016年,能记入个人年终总结的事情没几件,其中一个便是开源了Hawk。我花不少时间优化和推广它,得到的评价还算比较正面,因为负面评…

wrapper 并集如何使用

https://blog.csdn.net/u011229848/article/details/81902398 MybatisPlus QueryWrapper and or 连用 cnsu-cmh 2018-08-21 10:08:03 96287 收藏 26 分类专栏: MybatisPlus 文章标签: MybatisPlus and or 连用 QueryWrapper and 版权 QueryWrapper&l…

用quot;hosting.jsonquot;配置ASP.NET Core站点的Hosting环境

通常我们在 Prgram.cs 中使用硬编码的方式配置 ASP.NET Core 站点的 Hosting 环境,最常用的就是 .UseUrls() 。 public class Program { public static void Main(string[] args){ var host new WebHostBuilder() .UseUrls("http://*:5000"…

程序员常用网站收藏[定期更新]——csdn博客

网站收藏【定期更新】 资源类1.开源中国社区3.CodePlayer专注于编程技术分享4.源码之家5.阿里云6.免费logo在线制作, 标志设计, 公司logo设计7.搜素材 - 站酷 (ZCOOL)8.站长素材97.建站资源_伊思娜资源网-2014国内最全|免费空间|域名|网赚|免费cmcc|网络电话|网站优化|服装搭配…

No primary or default constructor found for interface java.util.List

https://blog.csdn.net/qq_39723363/article/details/84379685 springboot No primary or default constructor found for interface java.util.List 夏天吹雪 2018-11-23 11:31:12 67570 收藏 6 分类专栏: 工作随记 版权 RequestParam(value "content&…

论:开发者信仰之“天下IT是一家“(Java .NET篇)

比尔盖茨公认的IT界领军人物,打造了辉煌一时的PC时代。 2008年,史蒂夫鲍尔默接替了盖茨的工作,成为微软公司的总裁。 2013年他与微软做了最后的道别。 2013年以后,我才真正看到了微软的变化。尤其是它的“云优先,移动优…

配置高性能ElasticSearch集群的9个小贴士

Loggly服务底层的很多核心功能都使用了ElasticSearch作为搜索引擎。就像Jon Gifford(译者注:Loggly博客作者之一)在他近期关于“ElasticSearch vs Solr”的文章中所述,日志管理在搜索技术方面产生一些粗暴的需求,坚持下…

MyBatis-Plus Wrapper条件构造器查询大全

https://blog.csdn.net/weixin_38111957/article/details/91447509 MyBatis-Plus Wrapper条件构造器查询大全 IT贱男 2019-06-11 16:50:44 36133 收藏 66 分类专栏: Mybatis-Plus 版权 码农必备linux技能 本专栏主要从系统安装、入门命令讲解,会不…