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

【PTA数据结构 | C语言版】根据前序序列重构二叉树

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

文章目录

    • 题目
    • 代码

题目

请编写程序,根据给定二叉树的前序序列化结果,重构二叉树,并输出其前序遍历结果。

输入格式:
输入首先给出一个不超过 20 的正整数 n,随后一行给出 n 个前序序列的元素。其中键值都是不超过 9 位的正整数,空结点对应符号 #。

输出格式:
输出二叉树的前序遍历结果,每个数字占一行。

输入样例:
11
1 2 # 4 # # 3 5 # # #

输出样例:
1
2
4
3
5

代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>typedef struct TreeNode {int data;struct TreeNode *left;struct TreeNode *right;
} TreeNode;// 创建新节点
TreeNode* createNode(int data) {TreeNode* node = (TreeNode*)malloc(sizeof(TreeNode));node->data = data;node->left = NULL;node->right = NULL;return node;
}// 根据前序序列化结果递归构建二叉树
TreeNode* buildTree(char** tokens, int* index, int n) {if (*index >= n || strcmp(tokens[*index], "#") == 0) {(*index)++;return NULL;}TreeNode* node = createNode(atoi(tokens[*index]));(*index)++;node->left = buildTree(tokens, index, n);node->right = buildTree(tokens, index, n);return node;
}// 前序遍历二叉树(根-左-右)
void preOrderTraversal(TreeNode* root) {if (root == NULL) return;printf("%d\n", root->data);preOrderTraversal(root->left);preOrderTraversal(root->right);
}int main() {int n;scanf("%d", &n);// 消耗掉scanf后的换行符getchar();char input[1000];fgets(input, sizeof(input), stdin);// 分割输入字符串为标记数组char* tokens[100];int count = 0;char* token = strtok(input, " \n");while (token != NULL && count < n) {tokens[count++] = token;token = strtok(NULL, " \n");}int index = 0;TreeNode* root = buildTree(tokens, &index, n);preOrderTraversal(root);return 0;
}
http://www.xdnf.cn/news/1129951.html

相关文章:

  • 【Linux手册】重定向是如何实现的?Linux下为什么一切皆文件?
  • 20250715给荣品RD-RK3588开发板刷Android14时打开USB鼠标
  • Dify的默认端口怎么修改
  • Java 集合 示例
  • 应用部署作业-02-流程
  • Excel制作玫瑰图
  • 20250715_Sneak_neuro 靶机复盘
  • 使用JS编写用户信息采集表单
  • 基于conda包的环境创建、激活、管理与删除
  • C++-linux系统编程 8.进程(二)exec函数族详解
  • 3.2数据库-关系代数-函数依赖-范式
  • IDEA中删除多余的jdk选项 【IDEA2024版】
  • Linux-【单体架构/分布式架构】
  • 李宏毅《生成式人工智能导论》 | 第9讲 AI Agent
  • AI问答-Token:在人工智能领域,Token 是模型处理文本的核心单元 / 最小可处理片段
  • cursor使用mcp连接mysql数据库,url方式
  • 基于Python的图像文字识别系统
  • Transformer是什么 - 李沐论文《Attention Is All You Need》精读
  • 数据怎么分层?从ODS、DW、ADS三大层一一拆解!
  • ESP32S3+VSCode+PlatformIO+Arduino+Freertos开发入门指南:基于Arduino框架的应用开发全流程
  • 基于按键开源MultiButton框架深入理解代码框架(一)(指针的深入理解与应用)
  • 137. 只出现一次的数字 II
  • python+selenium UI自动化初探
  • Linux操作系统之信号:保存与处理信号
  • 嵌入式Linux:进程间通信机制
  • URL 转静态 HTML 文件 API 数据接口
  • 算法入门:BFS与DFS详解(C++实现)
  • k8s之Attach 和 Mount
  • [AI8051U入门第三步]串口1使用-printf重定向(乱码解决办法)
  • 生产问题排查-数据库连接池耗尽