首页
学习
活动
专区
圈层
工具
发布
37 篇文章
1
【愚公系列】软考中级-软件设计师 001-计算机系统知识(考点简介)
2
【愚公系列】软考中级-软件设计师 002-计算机系统知识(CPU)
3
【愚公系列】软考中级-软件设计师 003-计算机系统知识(进制转换)
4
【愚公系列】软考中级-软件设计师 004-计算机系统知识(数据的表示)
5
【愚公系列】软考中级-软件设计师 005-计算机系统知识(校验码)
6
【愚公系列】软考中级-软件设计师 006-计算机系统知识(存储系统)
7
【愚公系列】软考中级-软件设计师 007-计算机系统知识(输入输出技术)
8
【愚公系列】软考中级-软件设计师 008-计算机系统知识(计算机体系结构)
9
【愚公系列】软考中级-软件设计师 009-计算机系统知识(总线)
10
【愚公系列】软考中级-软件设计师 010-计算机系统知识(加密技术和认证技术)
11
【愚公系列】软考中级-软件设计师 011-程序设计语言基础知识(考点简介)
12
【愚公系列】软考中级-软件设计师 012-程序设计语言基础知识(概述)
13
【愚公系列】软考中级-软件设计师 013-程序设计语言基础知识(语言处理程序基础)
14
【愚公系列】软考中级-软件设计师 014-数据结构(考点简介)
15
【愚公系列】软考中级-软件设计师 015-数据结构(线性结构)
16
【愚公系列】软考中级-软件设计师 016-数据结构(数组、矩阵和广义表)
17
【愚公系列】软考中级-软件设计师 017-数据结构(树和二叉树概念)
18
【愚公系列】软考中级-软件设计师 018-数据结构(二叉树的分类)
19
【愚公系列】软考中级-软件设计师 019-数据结构(树和森林)
20
【愚公系列】软考中级-软件设计师 020-数据结构(图)
21
【愚公系列】软考中级-软件设计师 021-数据结构(查找算法)
22
【愚公系列】软考中级-软件设计师 022-数据结构(排序算法)
23
【愚公系列】软考中级-软件设计师 023-操作系统(考点简介)
24
【愚公系列】软考中级-软件设计师 024-操作系统(操作系统概述)
25
【愚公系列】软考中级-软件设计师 025-操作系统(进程管理-状态管理和前趋图)
26
【愚公系列】软考中级-软件设计师 026-操作系统(进程管理-信号量PV操作)
27
【愚公系列】软考中级-软件设计师 027-操作系统(进程管理-银行家算法和线程)
28
【愚公系列】软考中级-软件设计师 028-操作系统(存储管理-页式存储)
29
【愚公系列】软考中级-软件设计师 029-操作系统(段式存储和段页式存储)
30
【愚公系列】软考中级-软件设计师 030-操作系统(设备管理)
31
【愚公系列】软考中级-软件设计师 031-操作系统(文件管理)
32
【愚公系列】软考中级-软件设计师 032-操作系统(作业管理)
33
【愚公系列】软考中级-软件设计师 033-软件工程基础(考点简介)
34
【愚公系列】软考中级-软件设计师 034-软件工程基础(概述)
35
【愚公系列】软考中级-软件设计师 035-软件工程基础(过程模型)
36
【愚公系列】软考中级-软件设计师 036-软件工程基础(需求分析)
37
【愚公系列】软考中级-软件设计师 037-软件工程基础(系统设计)

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

🏆 作者简介,愚公搬代码 🏆《头衔》:华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,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腾讯技术创作特训营第五期有奖征文,快来和我瓜分大奖!

下一篇
举报
领券