数据结构之树和森林

这篇具有很好参考价值的文章主要介绍了数据结构之树和森林。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


  数据结构是程序设计的重要基础,它所讨论的内容和技术对从事软件项目的开发有重要作用。学习数据结构要达到的目标是学会从问题出发,分析和研究计算机加工的数据的特性,以便为应用所涉及的数据选择适当的逻辑结构、存储结构及其相应的操作方法,为提高利用计算机解决问题的效率服务。
  数据结构是指数据元素的集合及元素间的相互关系和构造方法。元素之间的相互关系是数据的 逻辑结构,数据元素及元素之间关系的存储称为 存储结构(或物理结构)。数据结构按照逻辑关系的不同分为 线性结构非线性结构两大类,其中,非线性结构又可分为树结构和图结构。
  树结构是一种非常重要的非线性结构,该结构中的一个数据元素可以有两个或两个以上的直接后继元素,树可以用来描述客观世界中广泛存在的层次结构关系。

1、树的存储结构

  常用的树的存储有双亲表示法、孩子表示法和孩子兄弟表示法。
  (1)双亲表示法。该表示法用一组地址连续的单元存储树的结点,并在每个结点中附设一个指示器,指出其双亲结点在该存储结构中的位置(即结点所在数组元素的下标)。显然,这种表示法对于求指定结点的双亲和祖先都十分方便,但对于求指定结点的孩子及后代则需要遍历整个数组,树的双亲表示法如下图所示。
数据结构之树和森林,数据结构,数据结构

  (2)孩子表示法。该表示法在存储结构中用指针指示出结点的每个孩子,为树中每个结点的孩子建立一个链表,即令每个结点的所有孩子结点构成一个用单链表表示的线性表,则n个结点的树具有 n 个单链表。将这 n 个单链表的头指针又排成一个线性表,如下图(a) 所示。显然,树的孩子表示法便于查找每个结点的子孙,若要找出指定结点的双亲则可能需要遍历所有的链表。
数据结构之树和森林,数据结构,数据结构

  用户也可以将双亲表示法和孩子表示法结合起来,形成树的双亲孩子表示结构,如上图(b) 所示。
  (3)孩子兄弟表示法。孩子兄弟表示法又称为二叉链表表示法,它在链表的结点中设置两个指针域分别指向该结点的第一个孩子和下一个兄弟,如下图 所示。
数据结构之树和森林,数据结构,数据结构

  树的孩子兄弟表示法为实现树、森林与二叉树之间的转换提供了可能,充分利用二叉树的有关算法来实现树及森林的操作,对难以把握规律的树和森林有着重要的现实意义。

2、树和森林的遍历

2.1、树的遍历

  由于树中的每个结点可以有多个子树,因此遍历树的方法有两种,即先根遍历和后根遍历。
  (1)树的先根遍历。树的先根遍历是先访问树的根结点,然后依次先根遍历根的各棵子树。对树的先根遍历等同于对转换所得的二叉树进行先序遍历。
  (2)树的后根遍历。树的后根遍历是先依次后根遍历树根的各棵子树,然后访问树根结点。树的后根遍历等同于对转换所得的二叉树进行中序遍历。

2.2、森林的遍历

  按照森林和树的相互递归定义,可以得出森林的两种遍历方法。
  (1)先序遍历森林。若森林非空,首先访问森林中第一棵树的根结点,然后先序遍历第一棵树根结点的子树森林,最后先序遍历除第一棵树之外剩余的树所构成的森林。
  (2)中序遍历森林。若森林非空,首先中序遍历森林中第一棵树的子树森林,然后访问第一棵树的根结点,最后中序遍历除第一棵树之外剩余的树所构成的森林。

3、树、森林和二叉树之间的相互转换

  树、森林和二叉树之间可以互相进行转换,即任何一个森林或一棵树可以对应表示为一棵二叉树,而任何一棵二叉树也能对应到一个森林或一棵树上。
  (1)树、森林转换为二叉树。利用树的孩子兄弟表示法可导出树与二叉树的对应关系,在树的孩子兄弟表示法中,从物理结构上看与二叉树的二叉链表表示法相同,因此就可以用这种同一存储结构的不同解释将一棵树转换为一棵二叉树,如下图 所示。一棵树可转换成唯一的一棵二叉树。
数据结构之树和森林,数据结构,数据结构

  由于树根没有兄弟,所以树转换为二叉树后,二叉树的根一定没有右子树。这样,将一个森林转换为一棵二叉树的方法是: 先将森林中的每一棵树转换为二叉树,再将第一棵树的根作为转换后的二叉树的根,第一棵树的左子树作为转换后二叉树根的左子树,第二棵树作为转换后二叉树的右子树,第三棵树作为转换后二叉树根的右子树的右子树,依此类推,森林就可以转换为一棵二叉树,如下图所示。
数据结构之树和森林,数据结构,数据结构

  (2)二叉树转换为树和森林。一棵二叉树可转换为唯一的树或森林,如下图所示
数据结构之树和森林,数据结构,数据结构文章来源地址https://www.toymoban.com/news/detail-824911.html

到了这里,关于数据结构之树和森林的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 数据结构--树和森林的遍历

    树和二叉树的转化后==》 树的先根遍历序列与这棵树相应二叉树的先序序列相同。 color{red}树的先根遍历序列与这棵树相应二叉树的先序序列相同。 树的先根遍历序列与这棵树相应二叉树的先序序列相同。 A B C D A ( B E F ) ( C G ) ( D H I ) A ( B ( E , K ) F ) ( C G ) ( D H I J ) begin{arr

    2024年02月15日
    浏览(47)
  • 《数据结构》第七章:树和森林

    在客观世界中,存在着诸多如行政机构、磁盘目录和族谱的组织结构,与动物分类类似,是一种层次化结构,可采用树形结构表示。譬如磁盘目录,一个目录的子目录通常不止两个,无法用二叉树表示,需要采用多叉树的形式,即每个结点可以有不同数目的子结点。 树 是含

    2024年01月23日
    浏览(43)
  • 【数据结构之树】初阶数据结构之树的实现及其各种方式(上)

    👻作者简介:M malloc,致力于成为嵌入式大牛的男人 👻专栏简介:本文收录于 初阶数据结构 ,本专栏主要内容讲述了初阶的数据结构,如顺序表,链表,栈,队列等等,专为小白打造的文章专栏。 👻相关专栏推荐:LeetCode刷题集,C语言每日一题。 本篇文章我将详细的讲解

    2024年02月17日
    浏览(38)
  • 《数据结构与算法》之树

    我们在前面的学习中认识到了栈还有队列这些线性的数据存储结构,而现在我们要了解的数据结构却不是线性的了,我们试想线性的结构最大的缺点查询不方便,不管你是从前往后开始查找数据,还是从后往前开始查找数据都是一个一个的比对, 效率很低,所以不推荐使用,

    2024年02月08日
    浏览(200)
  • 数据结构之树

    1.树定义 树(Tree)是由n(n≥0)个结点组成的有限集合(树中元素通常称为结点)。 n=0的树称为空树;n>0的树T由以下两个条件约定构成: ① 有一个特殊的结点称为根(Root)结点,它只有后继结点,没有前驱结 点。 ② 除根结点之外的其他结点分为m个互不相交的集合T0、T1、…、Tm-

    2024年02月12日
    浏览(35)
  • 【数据结构】非线性结构之树结构(含堆)

    前面的三篇文章已经将线性结构讲述完毕了,下面的文章将会为大家将讲点新东西:非线性结构中的 树结构 。萌新对这里的知识点相对陌生,建议反复观看!! 关于线性结构的三篇文章放在下面: 线性表之顺序表 线性表之链表 线性表之栈、队列 树是一种 非线性 的数据结

    2024年02月15日
    浏览(41)
  • 数据结构之树与二叉树——算法与数据结构入门笔记(五)

    本文是算法与数据结构的学习笔记第五篇,将持续更新,欢迎小伙伴们阅读学习。有不懂的或错误的地方,欢迎交流 前面章节介绍的都是线性存储的数据结构,包括数组、链表、栈、队列。本节带大家学习一种非线性存储的数据结构,即树(tree)。 不管是在面试时,还是日

    2024年02月08日
    浏览(35)
  • 数据结构学习分享之树的介绍

    💓博主CSDN主页:杭电码农-NEO💓   ⏩专栏分类:数据结构学习分享⏪   🚚代码仓库:NEO的学习日记🚚   🌹关注我🫵带你了解更多数据结构的知识   🔝🔝 前面我们学的都是链式结构或数组这种线性结构,今天我们正式开始学习\\\"树\\\"这个结构.树涉及的问题有很多,包括普通树

    2024年02月05日
    浏览(47)
  • 数据结构之树(Topk问题, 链式二叉树)

    取N个数中最大(小)的前k个值,N远大于k 这道题可以用堆的方法来解决,首先取这N个数的前k个值,用它们建堆 时间复杂度O(k) 之后将剩余的N-k个数据依次与堆顶数据进行比较,如果比堆顶数据大,则将堆顶数据覆盖后向下调整 时间复杂度(N-k)*log(N) 总共的时间复杂度为O(N*log(N)) 用数组

    2024年03月15日
    浏览(31)
  • JavaScript(ES6)数据结构与算法之树

    6.1 概念 非线性结构 n(n=0)个节点构成的有限集合,n=0时称为空树 对于任一非空树 有一个根节点 其余节点可以构成子树 树的术语: 节点的度 :节点的子树个数 树的度 :树所有节点中最大的度数 叶节点 /叶子节点:度为零的节点 父节点:有子树的的节点是子树根节点的父节

    2024年02月04日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包