【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;
}