前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【愚公系列】软考中级-软件设计师 019-数据结构(树和森林)

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

原创
作者头像
愚公搬代码
修改2024-01-31 10:49:48
1350
修改2024-01-31 10:49:48
举报

🏆 作者简介,愚公搬代码 🏆《头衔》:华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,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. 对于二叉树的每个节点,如果它有右子树,则将右子树作为该节点的一个子节点。

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

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


我正在参与2024腾讯技术创作特训营第五期有奖征文,快来和我瓜分大奖!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 🚀前言
  • 🚀一、树和森林
    • 🔎1.树的结构
      • 🔎2.树和二叉树的转换
      相关产品与服务
      云开发 CloudBase
      云开发(Tencent CloudBase,TCB)是腾讯云提供的云原生一体化开发环境和工具平台,为200万+企业和开发者提供高可用、自动弹性扩缩的后端云服务,可用于云端一体化开发多种端应用(小程序、公众号、Web 应用等),避免了应用开发过程中繁琐的服务器搭建及运维,开发者可以专注于业务逻辑的实现,开发门槛更低,效率更高。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档