树形结构—树和二叉树

概述

        其实,生活中树型结构有很多应用,比如:自然界中的树,人类社会的家谱和行政组织结构等等。

        我写的这篇文章主要是关于树和二叉树的一些相关概念的理解的解读,方便后续对应二叉树这种数据结构的深入理解和研究。

一、树的定义

        树型结构属于非线性结构(元素的前驱和后继的个数不是为1的),这一节讲的树形结构元素的前驱个数为1,但是元素的后继个数不是为1了(可以有多个后继),所以说树形机构元素的关系是一对多或者多对多的。树型结构的特点是节点之间是有分支的,并且还具有层次关系。
首先我们来看看树的定义

(Tree)是 n(n >=0)个节点的有限集

若 n = 0,称为空树

若 n > 0,则它满足如下两个条件:

有且仅有一个特定的称为根(Root)的节点;

其余节点可以分为m (m >= 0)个互不相交的有限集T1,T2,T3…Tm,其中每一个集合本身又是一棵树,并称为根的子树(SubTree)

我们来看看下面这一棵树:

上图的这个示意图符合树的定义,所以是一棵树。我把它进行了划分,首先,看银蓝色部分,A作为根节点,然后A节点有三个互不相交的集合,也就是有3个子树,分别是子树1{BEFHI},子树2{CG},子树3{D};然后看红色部分,B作为根节点,然后B下面有2个子树,分别是子树1{E}和子树2{FHI};再看粉色部分,C作为根节点,下面有一个子树就是G节点;最后看黑色部分,F作为根节点,然后下面有两个子树分别是节点H和节点I(节点是由数据域+指针域构成),通过我上面的简单分析,可以发现,树根节点和子树构成,其中每个子树又是由根节点和子树构成,这样层层嵌套,因此我们可以很显然的得知,树其实是一个递归的定义。

其实,对于一个抽象概念的理解,我们可以通过联想法来帮助我们的学习理解(联想生活中很常见的事情或者事物),树形结构在我们生活中是很常见的一种数据结构,比如我们的图书目录,一个目录(可以看作是根节点)分为了第一章,第二章,第三章等,然后每个章节下面有多个小结,每个小结下面又细分了多个知识点。

二、树的基本术语

:这里只讲一些我个人觉得比较重要的基本术语

根节点:非空树中无前驱节点的节点,根节点有且只有一个哦

节点的度:节点拥有的子树个数

树的度:树内个节点的度的最大值

叶子(也称为终端节点):度为0的节点

树的深度(也叫做树的高度):树中节点的最大层次

举例:比如上面这张图A节点的度是3,因为它下面有3颗子树,B节点的度是2,C节点的度是1,D节点的度是0,F节点的度是2,所以该树的度是3,因为所有节点的度的最大值是3;树的深度是4。

三、为什么要研究二叉树

        普通的树我们知道,它的结构其实是多变复杂的,存储起来也很复杂,而二叉树相对比较简单,如果一个普通树不转换为二叉树,那它的运算将很难实现。

这里提到二叉树比较简单,那简单在哪里呢?两点:

  • 二叉树的结构最简单,规律性最强;

  • 可以证明,所有的树都能转为唯一对应的二叉树,不失一般性。

所以二叉树的这种结构轻松的解决了树的存储结构及其运算种存在的复杂性,将复杂的问题变得简单了,这也是我们为什么要单独研究二叉树的原因。

四、二叉树和树的区别

需要注意的是:二叉树并不是树的特殊情况,它们完全是两个概念。

二叉树节点的子树需要区分左子树和右子树,即使只有一颗子树也要进行区分,说明他是左子树还是右子树

而树当节点只有一个孩子时,就无需区分它是左还是右的次序,因此二者是不同的,这是二叉树与树的最主要的差别。

换句话说,二叉树每个节点位置或者说次序都是固定的,可以是空,但是不可以说它没有位置,而树的节点位置是相对于别的节点来说的,没有别的节点时,它就无所有左右了。

思考:具有3个节点的二叉树可能有几种不同的形态?普通树呢

如上图所示(哈哈哈,我自己画的,有点丑【可以忽略】),二叉树有5种形态,而树只有两种,原因就是因为二叉树区分左右位置,而树是不区分的。

五、二叉树的定义

首先看一下二叉树的定义:

二叉树是n(n >= 0)个节点的有限集,它或者是空集(n = 0),或者由一个根节点及两棵互不相交的分别称为这个根的左子树右子树的二叉树组成。

特点

  1. 每个节点最多有两个孩子(二叉树中不存在度大于2的节点)
  2. 子树有左右之分,次序不能颠倒,否则就变成了另外一棵树了。

二叉树可以是空集合,根可以有空的左子树或空的右子树

六、二叉树的不同形态

小结

上面就是我关于树形结构的总结和自己的理解,下一篇文章我会讲解二叉树的具体实现。

文章不定期更新中,未完待续哦~~~
大家记得点赞收藏,多评论,关注小哥哥哦

猜你喜欢

转载自blog.csdn.net/weixin_42135693/article/details/105745856