【408考点之数据结构】树和森林的基本概念、二叉树转森林、以及树和森林的遍历

树和森林的基本概念、二叉树转森林、以及树和森林的遍历

一、树和森林的基本概念

树(Tree) 是一种重要的非线性数据结构,由n(n≥0)个节点组成,其中有一个根节点和若干子树,这些子树又是若干树的集合。

森林(Forest) 是m(m≥0)棵互不相交的树的集合。也就是说,森林是由多棵树组成的集合。

二、二叉树转森林

将一棵二叉树转化为森林的过程如下:

  1. 删除二叉树的根节点:将根节点删除,二叉树会分成两棵子树。
  2. 将两棵子树分别作为森林中的两棵树:删除根节点后,左子树和右子树分别成为森林中的两棵树。

具体步骤如下:

  1. 选择一个节点作为根,将其左子树的根节点的右子树作为第一棵树,右子树的根节点的左子树作为第二棵树。
  2. 重复该过程直到处理完所有节点。
三、树和森林的遍历

树和森林的遍历方法主要包括深度优先遍历和广度优先遍历。

  1. 深度优先遍历(Depth First Traversal):包括先序遍历、中序遍历和后序遍历。

    • 先序遍历(Preorder Traversal)

      • 过程:访问根节点 -> 先序遍历左子树 -> 先序遍历右子树
      • 代码实现
      void preorderTraversal(TreeNode *root) {if (root) {printf("%d ", root->data);preorderTraversal(root->left);preorderTraversal(root->right);}
      }
      
    • 中序遍历(Inorder Traversal)

      • 过程:中序遍历左子树 -> 访问根节点 -> 中序遍历右子树
      • 代码实现
      void inorderTraversal(TreeNode *root) {if (root) {inorderTraversal(root->left);printf("%d ", root->data);inorderTraversal(root->right);}
      }
      
    • 后序遍历(Postorder Traversal)

      • 过程:后序遍历左子树 -> 后序遍历右子树 -> 访问根节点
      • 代码实现
      void postorderTraversal(TreeNode *root) {if (root) {postorderTraversal(root->left);postorderTraversal(root->right);printf("%d ", root->data);}
      }
      
  2. 广度优先遍历(Breadth First Traversal):层次遍历

    • 过程:按照层次从上到下、从左到右依次访问各节点
    • 代码实现
    #include <stdio.h>
    #include <stdlib.h>
    #define MAX_QUEUE_SIZE 100typedef struct TreeNode {int data;struct TreeNode *left;struct TreeNode *right;
    } TreeNode;typedef struct {TreeNode *data[MAX_QUEUE_SIZE];int front;int rear;
    } Queue;void initQueue(Queue *q) {q->front = q->rear = 0;
    }int isQueueEmpty(Queue *q) {return q->front == q->rear;
    }void enqueue(Queue *q, TreeNode *node) {if ((q->rear + 1) % MAX_QUEUE_SIZE == q->front) {printf("Queue is full\n");return;}q->data[q->rear] = node;q->rear = (q->rear + 1) % MAX_QUEUE_SIZE;
    }TreeNode* dequeue(Queue *q) {if (isQueueEmpty(q)) {printf("Queue is empty\n");return NULL;}TreeNode *node = q->data[q->front];q->front = (q->front + 1) % MAX_QUEUE_SIZE;return node;
    }void levelOrderTraversal(TreeNode *root) {if (!root) return;Queue q;initQueue(&q);enqueue(&q, root);while (!isQueueEmpty(&q)) {TreeNode *node = dequeue(&q);printf("%d ", node->data);if (node->left) enqueue(&q, node->left);if (node->right) enqueue(&q, node->right);}
    }
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/36434.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

检索增强生成 (RAG):揭开这一术语的神秘面纱并解释其带来的价值

一、介绍 如今&#xff0c;数据已成为新的黄金&#xff0c;而高效筛选这些丰富信息的能力则是成功企业脱颖而出的关键。Retrieval Augmented Generation&#xff08;RAG&#xff09;是创新的标杆&#xff0c;尤其是在知识管理领域。它不再只是为了存储信息&#xff0c;而是为了…

在运行中遇到扫描包问题

问题描述&#xff1a;当我们看到这个上面一行代码时就代表我们有个包没有被当前的Spring容器给扫描到&#xff0c;关于这个问题我们有两个&#xff1a;第一把整个包导进来&#xff0c;第二用哪个导哪个

Linux Swap

Swap: 页面换出&#xff1a;就是在 Swap 机制下&#xff0c;当内存资源紧张时&#xff0c;内核就会把不经常使用的这些匿名页中的数据写入到 Swap 分区或者 Swap 文件中。从而释放这些数据所占用的内存空间。 页面换入&#xff1a;就是当进程再次访问那些被换出的数据时&…

《人生苦短,我用python·六》ctypes 封装 C++ 接口并在 Python 中调用

编写 C 代码 首先&#xff0c;编写一个简单的 C 函数并将其编译成 DLL 动态链接库 // mylib.cpp #include <iostream>extern "C" {__declspec(dllexport) int add(int a, int b) {return a b;} }编写 C 头文件 虽然在这个简单示例中头文件不是必需的&#xf…

7 个不容忽视的开源安全工具

专业人士选择的第一个工具通常是开源选项,因为它们得到了广泛社区的保证和支持。此代码是支持安全可靠的互联网的基础的一部分。 最近,XZ Utils 等丑闻让用户犹豫不决。开放性是否是攻击的危险载体?还有其他问题在等着他们吗? 辩护者指出,虽然开放性可以让某些攻击变得更…

深度学习实战82-新的研究方向:大模型与图模型结合生成大型图模型,大图模型相关挑战和机遇的观点

大家好,我是微学AI,今天给大家介绍一下深度学习实战82-新的研究方向:大模型与图模型结合生成大型图模型,大图模型相关挑战和机遇的观点。随着人工智能的飞速发展,大型模型已成为人工智能领域最新的突破性成就。在图方面,大型模型尚未取得与自然语言处理和计算机视觉等其他…

java:aocache 0.4.0 缓存控制机制

aoocache发布第一个版本0.1.0时&#xff0c;没有考虑到使用aocache的项目对方法缓存的控制需求。 场景 给同事做培训时&#xff0c;同事提到这个需求&#xff0c;他希望能够有方法主动去清理指定方法的缓存&#xff1a; 他的数据是由其他服务启动时提供的&#xff0c;他的方法…

Python基础语法:自定义函数

在Python中&#xff0c;自定义函数允许你创建自己的函数来执行特定的任务。这些函数可以接受参数&#xff0c;执行一系列操作&#xff0c;并返回结果。以下是创建和使用自定义函数的基本步骤&#xff1a; 定义函数 使用def关键字来定义一个函数。函数定义的基本语法如下&…

可持续发展教育:塑造未来的教育模式

在当今全球化和技术进步的背景下&#xff0c;可持续发展教育&#xff08;Education for Sustainable Development, ESD&#xff09;正逐渐成为教育改革的重要议题。本文将深入探讨可持续发展教育的定义、重要性、实施策略及其在全球教育中的实际影响&#xff0c;旨在为读者提供…

【异步编程】【解锁并发的力量:Python 异步编程指南】

目录 前言一、异步编程的概念1-1、异步编程1-2、同步 vs 异步1-3、阻塞 vs 非阻塞1-4、并发 vs 并行 二、Python 异步编程的主要模块2-1、asyncio2-2、async 和 await 关键字2-3、 aiohttp 三、案例分析3-0、安装3-1、基本案例3-2、并发执行多个任务3-3、异常处理3-4、与队列结…

嵌入式Linux系统编程 — 5.1 uname、sysinfo、gethostname、sysconf函数查询系统信息

目录 1 uname函数获取内核名称和信息 1.1 Linux系统命令行 1.2 系统调用函数 2 sysinfo 函数 3 gethostname 函数 4 sysconf函数 1 uname函数获取内核名称和信息 1.1 Linux系统命令行 在Linux系统中&#xff0c;uname命令行工具可以显示关于当前操作系统的信息。这个命…

你还能顶几天?

A总&#xff1a;你还能顶几天&#xff1f; 汪汪队&#xff1a;顶到奉命撤退的那一天 A总&#xff1a;你在这守散钱点几十年了&#xff0c;从来没跟我提过任何的要求&#xff0c;难道你不困难吗&#xff1f; 汪汪队&#xff1a;有困难&#xff0c;但是我提了有什么用呢&#…

第三方服务提供商的五大风险

亚马逊如何应对网络安全挑战 关键网络安全统计数据和趋势 移动优先世界中安全和隐私策略 当今数字时代网络安全的重要性 用户无法停止犯安全错误的 3 个原因 首席安全官可能过于依赖 EDR/XDR 防御 随着业务流程变得越来越复杂&#xff0c;公司开始转向第三方来提高其提供关…

解析XML文件的几种方法

解析XML文件的几种方法 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天我们将深入探讨在Java中解析XML文件的几种常用方法。XML&#xff08;可扩展标记语言…

《每天5分钟用Flask搭建一个管理系统》 第6章:数据库集成

第6章&#xff1a;数据库集成 6.1 数据库的选择和配置 在Flask中集成数据库&#xff0c;首先需要选择一个数据库系统。常见的选择包括SQLite、MySQL、PostgreSQL等。选择后&#xff0c;需要配置数据库连接字符串。 示例代码&#xff1a;配置数据库 from flask import Flask…

算法基础--------【图论】

图论&#xff08;待完善&#xff09; DFS:和回溯差不多 BFS:进while进行层序遍历 定义: 图论&#xff08;Graph Theory&#xff09;是研究图及其相关问题的数学理论。图由节点&#xff08;顶点&#xff09;和连接这些节点的边组成。图论的研究范围广泛&#xff0c;涉及路径、…

DNF手游鬼剑士攻略:全面解析流光星陨刀的获取与升级!云手机强力辅助!

《地下城与勇士》&#xff08;DNF&#xff09;手游是一款广受欢迎的多人在线角色扮演游戏&#xff0c;其中鬼剑士作为一个经典职业&#xff0c;因其强大的输出能力和炫酷的技能特效&#xff0c;吸引了众多玩家的青睐。在这篇攻略中&#xff0c;我们将详细介绍鬼剑士的一把重要武…

使用JavaScript的indexOf方法

使用JavaScript的indexOf方法 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天我们来探讨JavaScript中的indexOf方法。indexOf方法是JavaScript中一个非常实…

【Python报错】已解决 ModuleNotFoundError: No module named ‘transformers‘

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 引入 ModuleNotFoundError: No module named ‘transformers’ 是一个常见的错误&#xff0c;它表明你的Python环境中没有安装t…

如何用CSS样式实现一个优雅的渐变效果?

CSS渐变效果 CSS渐变&#xff08;Gradients&#xff09;是一种让两种或多种颜色平滑过渡的视觉效果&#xff0c;广泛应用于网页背景、按钮、边框等&#xff0c;以创造丰富的视觉体验。CSS提供了线性渐变&#xff08;Linear Gradients&#xff09;和径向渐变&#xff08;Radial…