当前位置: 首页 > news >正文

【PTA数据结构 | C语言版】根据后序和中序遍历输出前序遍历

本专栏持续输出数据结构题目集,欢迎订阅。

文章目录

    • 题目
    • 代码

题目

本题要求根据给定的一棵二叉树的后序遍历和中序遍历结果,输出该树的前序遍历结果。

输入格式:
第一行给出正整数 n (≤30),是树中结点的个数。随后两行,每行给出 n 个整数,分别对应后序遍历和中序遍历结果,数字间以空格分隔。题目保证输入正确对应一棵二叉树。

输出格式:
在一行中输出Preorder: 以及该树的前序遍历结果。数字间有1个空格,行末不得有多余空格。

输入样例:
7
2 3 1 5 7 6 4
1 2 3 4 5 6 7

输出样例:
Preorder: 4 1 3 2 6 5 7

代码

#include <stdio.h>
#include <stdlib.h>#define MAX_N 30int postorder[MAX_N], inorder[MAX_N];
int first_output = 1; // 标记是否是第一个输出的节点// 根据后序和中序递归构建二叉树并输出前序遍历
void buildAndPrintPre(int post_start, int post_end, int in_start, int in_end) {if (post_start > post_end || in_start > in_end) return;// 后序遍历的最后一个元素是根节点int root_val = postorder[post_end];// 控制输出格式if (first_output) {printf("Preorder: %d", root_val);first_output = 0;} else {printf(" %d", root_val);}// 在中序遍历中找到根节点的位置int root_pos = in_start;while (inorder[root_pos] != root_val) root_pos++;// 计算左子树的节点数int left_count = root_pos - in_start;// 递归处理左子树buildAndPrintPre(post_start, post_start + left_count - 1, in_start, root_pos - 1);// 递归处理右子树buildAndPrintPre(post_start + left_count, post_end - 1, root_pos + 1, in_end);
}int main() {int n;scanf("%d", &n);// 读取后序遍历for (int i = 0; i < n; i++) {scanf("%d", &postorder[i]);}// 读取中序遍历for (int i = 0; i < n; i++) {scanf("%d", &inorder[i]);}// 构建并输出前序遍历buildAndPrintPre(0, n - 1, 0, n - 1);printf("\n");return 0;
}    
http://www.dtcms.com/a/286420.html

相关文章:

  • 更适合后端宝宝的前端三件套之CSS
  • 域名备案的注册地址怎么更改
  • 基于pandas,按日期时间排序,计算每个连续段的开始时间、结束时间,以及时长
  • Selenium自动化浏览器操作指南
  • Deep Multi-scale Convolutional Neural Network for Dynamic Scene Deblurring 论文阅读
  • DTW算法解决时序问题的解析实践
  • 【C++】std::exchange 原子性 返回值优化RVO
  • js基本数据类型之字符串类型
  • Python 数据分析与可视化:从基础到进阶的技术实现与优化策略
  • svn如何设置忽略文件夹或者文件的提交
  • PyQt5信号与槽(信号与槽的高级玩法)
  • 四足机器人远程视频与互动控制的全链路方案
  • 【C++】——类和对象(中)——默认成员函数
  • 【世纪龙科技】汽车故障诊断与排除仿真教学软件让课堂更高效安全
  • 【RK3576】【Android14】开发板概述
  • iOS WebView 调试实战 全流程排查接口异常 请求丢失与跨域问题
  • github jekyll+chirpy主题搭建博客
  • 【.net core】支持通过属性名称索引的泛型包装类
  • Spring AI开发智能客服(Tool calling)
  • Linux 定时任务全解析:atd 与 crond 的区别及实战案例(含日志备份 + 时间写入)
  • SpringBoot项目创建,三层架构,分成结构,IOC,DI相关,@Resource与@Autowired的区别
  • 融合优势:SIP 广播对讲联动华为会议 全场景沟通响应提速​
  • 【PHP】Swoole:CentOS安装MySQL+Swoole
  • 强化学习框架VeRL全面解析(架构、调试、修改与应用)
  • vbox增加虚拟磁盘空间大小
  • 基于springboot+vue+mysql的在线文档管理系统的设计与实现(源码+论文+PPT答辩+开题报告)
  • ClickHouse物化视图避坑指南:原理、数据迁移与优化
  • ESP32-IDF LVGL UI 设计工具的使用
  • 海森矩阵(Hessian Matrix)在SLAM图优化和点云配准中的应用介绍
  • Go 的热重载工具 Air 详解