树的四种表示法(树状,文氏图标,凹入表示法,括号表示法),三种遍历(先根,后根层次遍历)(一张图教会你什么是树)

数据结构专升本学习,树篇

前言

上一篇文章博主学了稀疏矩阵,线性结构的存储我们就学完了,我现在要开始非线性结构存储了,今天这一篇文章我们学习一下树,树状结构是非常重要的非线性结构,它用于描述数据元素之间的层次关系,像我们生活中的族谱一样,树状结构主要包括树和二叉树。我们今天主要讲解树,二叉树下一篇文章讲解。嘿嘿偷个懒!!!

每日一遍,双十一你剁手了嘛?

20181111866840_BbVFsr

1.树的定义

树(tree)是包含 n(n≥0) 个节点,当 n=0 时,称为空树,非空树中条边的有穷集,在非空树中有三个定义:(1)树的每个元素称为节点(node);(2)有一个特定的节点被称为根节点或树根,也就是第一个结点(root);(3)除根节点之外的其余数据元素被分为个互不相交的集合,其中每一个集合本身也是一棵树,被称作原树的子树(subtree);讲人话就是:第一结点叫根结点,其他的元素叫结点,然后每个结点可能下面还有结点,它也是个树,相当于树和树的结合。

树也可以这样定义:树是由根节点和若干颗子树构成的。树是由一个集合以及在该集合上定义的一种关系构成的。集合中的元素称为树的节点,所定义的关系称为父子关系。父子关系在树的节点之间建立了一个层次结构。在这种层次结构中有一个节点具有特殊的地位,这个节点称为该树的根节点,或称为树根。

image-20211111214206711

2.树的逻辑结构

树的逻辑结构表示有:树状表示法,文氏图表示法,凹入表示法和括号表示法。

2.1.树状表示法:

树是最基本的逻辑结构表示法,使用一棵树倒置表示,非常直观。

image-20211111200832009

2.文氏图标表示法:

使用集合以及集合包含关系描述树结构

image-20211111201556476

3.凹入表示法:

使用线段的伸缩的关系描述树结构

image-20211111202310399

4.括号表示法:

将树的根结点写在括号的左边,除根结点之外的其余结点写在括号中,并用逗号分隔。

image-20211111202939928

3.树的一些专业术语

空集合也是树,称为空树。空树中没有节点;
孩子节点或子节点:一个节点含有的子树的根节点称为该节点的子节点;
节点的度:一个节点含有的子节点的个数称为该节点的度;
叶节点或终端节点:度为0的节点称为叶节点;
非终端节点或分支节点:度不为0的节点;
双亲节点或父节点:若一个节点含有子节点,则这个节点称为其子节点的父节点;
兄弟节点:具有相同父节点的节点互称为兄弟节点;
树的度:一棵树中,最大的节点的度称为树的度;
节点的层次:从根开始定义起,根为第1层,根的子节点为第2层,以此类推;
树的高度或深度:树中节点的最大层次;
堂兄弟节点:双亲在同一层的节点互为堂兄弟;
节点的祖先:从根到该节点所经分支上的所有节点;
子孙:以某节点为根的子树中任一节点都称为该节点的子孙;
森林:由棵互不相交的树的集合称为森林。

使用逻辑图来表达一下:

image-20211111210430828

4.树的性质

性质一:树中结点数等于所有结点的度数加一
根据树的定义,在一棵树中,除根结点以外,每个结点有且仅有一个直接前驱,也就是说,每个结点与指向它的 一个分支一一对应,所以,除根结点以外的结点数等于所有结点的分支数(即度数),而根结点无直接前驱,因此,还要加一。
性质二:度为m的树中第i层上至多有m的(i-1)次方个结点((m^i-1)i大于等于1)
性质三:高度为h的m次树至多有(m^h)-1除以(m-1)

5.树的基本运算

5.1 先根遍历

首先访问根结点然后遍历左子树,最后遍历右子树。在遍历左、右子树时,仍然先访问根结点,然后遍历左子树,最后遍历右子树,如果树为空则返回。如图解释:

image-20211111211952869

5.2后根遍历

后根遍历首先遍历左子树,然后遍历右子树,最后访问根结点,在遍历左、右子树时,仍然先遍历左子树,然后遍历右子树,最后遍历根结点

image-20211111212451844

5.3层次遍历

层次遍历按层访问结点:从根结点开始,按照从上到下,从左到右的次序访问每一结点,先访问第一层的结点,再依次访问第二层的所有结点;再访问第三层的所有结点,依此类推

image-20211111213022314

总结

博主只是讲解了树的定义,树的逻辑结构,还有树的一些遍历的方法,博主画了很多逻辑图让大家理解,因为博主觉得编程真的需要画图,我相信学过数据结构的人,都知道老师在讲课的时候都会画一个图,这个图就是一个逻辑,能告诉我们下一步该往哪走,怎么走,很生动很形象,所有博主一直很提倡画图,我们遇到考试了,或者其他什么的都可以画一张图来帮助我们理解整个程序,也相当于帮助我们记忆数据。嗯啦,期待下一篇二插树逻辑分析,关于树的存储的具体代码实现博主会另外出一篇文章。好了创作不易,希望大家点赞,关注,评论,收藏。谢谢啦,不喜勿喷哦。

上一篇:数据结构专升本学习,稀疏矩阵(画图教你稀疏矩阵的三元组和十字链表示)

下一篇:数据结构专升本学习,二叉树篇画张图教你秒懂二叉树的5个性质,四个遍历

cf652d2bgy1fet5azuzebg205k05kwgu

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IC00

打赏就发新文

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值