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

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

文章目录

题目

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

输入格式:

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

输出格式:

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

输入样例:

11

1 2 # 4 # # 3 5 # # #

输出样例:

1

2

4

3

5

代码

cpp 复制代码
#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;
}
相关推荐
智驱力人工智能5 小时前
工厂智慧设备检测:多模态算法提升工业安全阈值
人工智能·算法·安全·边缘计算·智慧工厂·智能巡航·工厂设备检测
晨非辰8 小时前
#C语言——刷题攻略:牛客编程入门训练(六):运算(三)-- 涉及 辗转相除法求最大公约数
c语言·开发语言·经验分享·学习·学习方法·visual studio
2501_924731478 小时前
城市路口识别准确率↑31%!陌讯时空建模算法在交通拥堵识别中的突破
人工智能·算法·目标检测·计算机视觉·目标跟踪
熬了夜的程序员8 小时前
【华为机试】208. 实现 Trie (前缀树)
数据结构·算法·华为od·华为
遇见尚硅谷10 小时前
C语言:单链表学习
java·c语言·学习
小O的算法实验室10 小时前
2024年ESWA SCI1区TOP,自适应种群分配和变异选择差分进化算法iDE-APAMS,深度解析+性能实测
算法·论文复现·智能算法·智能算法改进
玄月初二丶11 小时前
C语言变量的声明和定义有什么区别?
c语言·开发语言·变量
不吃洋葱.12 小时前
左子树之和
算法
金融小师妹12 小时前
基于AI量化模型的比特币周期重构:传统四年规律是否被算法因子打破?
大数据·人工智能·算法
数据智能老司机13 小时前
图算法趣味学——最短路径
数据结构·算法·云计算