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

【PTA数据结构 | C语言版】将表达式树转换成中缀表达式

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

文章目录

    • 题目
    • 代码

题目

请编写程序,读入两个操作数和一个操作符,建立表达式树,输出中缀表达式。

输入格式:
输入给出 2 个整数和一个字符,依次为表达式的第 1、2 个操作数,和操作符。

输出格式:
在一行中输出中缀表达式,其中左右子表达式各用一对圆括号 () 括起,两对括号中间输出操作符。表达式中没有任何空格。

输入样例:
1 2 +

输出样例:
(1)+(2)

代码

#include <stdio.h>
#include <stdlib.h>// 定义表达式树的节点结构
typedef struct TreeNode {int data;           // 存储操作数或操作符int isOperator;     // 标记是否为操作符struct TreeNode *left, *right;
} TreeNode;// 创建新节点
TreeNode* createNode(int data, int isOperator) {TreeNode* node = (TreeNode*)malloc(sizeof(TreeNode));node->data = data;node->isOperator = isOperator;node->left = node->right = NULL;return node;
}// 递归打印中缀表达式
void printInfix(TreeNode* root) {if (root == NULL) return;if (root->isOperator) {printf("(");printInfix(root->left);printf(")%c(", root->data);printInfix(root->right);printf(")");} else {printf("%d", root->data);}
}// 释放树的内存
void freeTree(TreeNode* root) {if (root == NULL) return;freeTree(root->left);freeTree(root->right);free(root);
}int main() {int op1, op2;char op;// 读取输入scanf("%d %d %c", &op1, &op2, &op);// 构建表达式树TreeNode* left = createNode(op1, 0);TreeNode* right = createNode(op2, 0);TreeNode* root = createNode(op, 1);root->left = left;root->right = right;// 输出中缀表达式printInfix(root);printf("\n");return 0;
}
http://www.lryc.cn/news/588779.html

相关文章:

  • JDK1.8函数式编程实战(附日常工作案例,仅此一篇耐心看完彻底搞懂)
  • 进程探秘:从 PCB 到 fork 的核心原理之旅
  • Isaac Sim仿真赋能机器人工作流,推动具身智能在机器人领域研究
  • Web前端入门:JavaScript 由程序触发绑定事件的几种方式
  • redisson 设置了过期时间,会自动续期吗
  • [ctfshow web入门]web98 学习PHP的引用
  • LeetCode 3136.有效单词:遍历模拟
  • 21.映射字典的值
  • 连接new服务器注意事项
  • 非实时的防控场景
  • LLM面试题及讲解 4
  • 【Tauri】Tauri 2.x+Vue自动更新教程对接后端接口更新
  • C++--哈希
  • CPU寄存器、进程上下文与Linux O(1)调度器原理
  • 知识付费小程序资质全解析
  • 进程的内存映像,只读区,可读写区,堆,共享库,栈详解
  • 【机器学习基础【5】】Python数据科学三件套:从数据创建到处理再到可视化实战
  • 链表的 哑结点的本质
  • 排序算法实战(上)
  • 经典排序算法之希尔排序
  • 解锁Python爬虫:数据获取与清洗的进阶指南
  • 深入浅出 RabbitMQ-核心概念介绍与容器化部署
  • Zabbix钉钉告警
  • 如何将华为文件传输到电脑
  • C++ - 仿 RabbitMQ 实现消息队列--muduo快速上手
  • 每日钉钉API探索:chooseUserFromList灵活选取自定义联系人
  • 变更缓冲池简介
  • Git分支管理与工作流详解
  • STL的一些知识点
  • Java-特殊文件、日志技术