【愚公系列】软考中级-软件设计师 019-数据结构(树和森林)

举报
愚公搬代码 发表于 2024/01/26 22:53:44 2024/01/26
【摘要】 🏆 作者简介,愚公搬代码🏆《头衔》:华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,CSDN商业化专家,阿里云专家博主,阿里云签约作者,腾讯云优秀博主,腾讯云内容共创官,掘金优秀博主,51CTO博客专家等。🏆《近期荣誉》:2023年华为云十佳博主,2022年CSDN博客之星TOP2,2022年华为云十佳博主等。🏆《博客内容》:.NET、Java、...

🏆 作者简介,愚公搬代码
🏆《头衔》:华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,CSDN商业化专家,阿里云专家博主,阿里云签约作者,腾讯云优秀博主,腾讯云内容共创官,掘金优秀博主,51CTO博客专家等。
🏆《近期荣誉》:2023年华为云十佳博主,2022年CSDN博客之星TOP2,2022年华为云十佳博主等。
🏆《博客内容》:.NET、Java、Python、Go、Node、前端、IOS、Android、鸿蒙、Linux、物联网、网络安全、大数据、人工智能、U3D游戏、小程序等相关领域知识。
🏆🎉欢迎 👍点赞✍评论⭐收藏


🚀前言

树是一种非常常见的数据结构,它由节点和边组成。每个节点都可以有零个或多个子节点,而除了根节点外的每个节点都有一个父节点。

树有许多变种,包括二叉树、二叉搜索树、红黑树等。二叉树是一种特殊的树,每个节点最多只有两个子节点。二叉搜索树是一种有序的二叉树,左子树的所有节点的值都小于根节点的值,右子树的所有节点的值都大于根节点的值。红黑树是一种自平衡二叉搜索树,它通过重新分配节点的颜色来确保树的平衡。

森林是由多个互不相交的树组成的数据结构。每个树都可以独立处理,并且没有共享的节点。森林可以通过将树的根节点连接在一起来构建,或者通过将树的节点复制到新的树中来构建。

树和森林在计算机科学中有广泛的应用。它们被用于构建层次结构,如操作系统的文件系统或网页的DOM树。它们还常用于实现搜索和排序算法,如二叉搜索树被用于实现快速查找和插入。另外,图算法中的许多问题可以转化为树或森林问题来求解。

🚀一、树和森林

🔎1.树的结构

树的存储结构主要有三种:双亲表示法、孩子表示法和孩子兄弟表示法。

  • 在双亲表示法中,树的节点连续存储在一组地址单元中,并在每个节点中附带一个指示器,指示其双亲节点所在数组元素的下标。

  • 孩子表示法中,节点的每个孩子使用指针表示,并为每个节点的孩子建立一个链表。

  • 孩子兄弟表示法又称为二叉链表表示法,为每个存储节点设置两个指针域,分别指向该节点的第一个孩子和下一个兄弟节点。

树和森林的遍历方法有两种:先根遍历和后根遍历。

  • 在树的先根遍历中,先访问根节点,然后依次遍历根的各颗子树。

  • 在后根遍历中,先遍历根的各颗子树,然后访问根节点。同样,在森林的遍历中,对于森林中的每棵树,都可以进行先根遍历或后根遍历的操作。

🔎2.树和二叉树的转换

树和二叉树是两种不同的数据结构,它们之间可以进行相互转换。

将树转换为二叉树的过程可以通过以下步骤进行:

  1. 选择一个树节点作为根节点,并创建一个新的二叉树,将该节点作为根节点。
  2. 将树的子节点按照从左到右的顺序,依次添加为二叉树该节点的左子树的右孩子(如果左子树的右孩子为空)或右子树的左孩子(如果右子树的左孩子为空)。
  3. 对于每个添加的节点,再按照同样的方式处理它的子节点。

将二叉树转换为树的过程可以通过以下步骤进行:

  1. 选择二叉树的根节点作为树的根节点。
  2. 对于二叉树的每个节点,如果它有左子树,则将左子树作为该节点的一个子节点。
  3. 对于二叉树的每个节点,如果它有右子树,则将右子树作为该节点的一个子节点。

需要注意的是,二叉树转换为树时,可能会有多个子节点指向同一个节点,而树转换为二叉树时,每个节点只有一个左孩子和一个右孩子。

示例如下图:采用连线法,将最左边节点和其兄弟节点都连接起来,而原来的父节点和兄弟节点的连线则断开,这种方法最简单,要求掌握。

在这里插入图片描述


🚀感谢:给读者的一封信

亲爱的读者,

我在这篇文章中投入了大量的心血和时间,希望为您提供有价值的内容。这篇文章包含了深入的研究和个人经验,我相信这些信息对您非常有帮助。

如果您觉得这篇文章对您有所帮助,我诚恳地请求您考虑赞赏1元钱的支持。这个金额不会对您的财务状况造成负担,但它会对我继续创作高质量的内容产生积极的影响。

我之所以写这篇文章,是因为我热爱分享有用的知识和见解。您的支持将帮助我继续这个使命,也鼓励我花更多的时间和精力创作更多有价值的内容。

如果您愿意支持我的创作,请扫描下面二维码,您的支持将不胜感激。同时,如果您有任何反馈或建议,也欢迎与我分享。

在这里插入图片描述

再次感谢您的阅读和支持!

最诚挚的问候, “愚公搬代码”

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。