#include <bits/stdc++.h> using namespace std; typedef string ElemType; typedef struct BitNode { ElemType data; struct BitNode *lchild,*rchild; } BitNode,*BiTree; //char sc[10]= {"+-*/"}; void CreateBiTree(BiTree &t) { string ch; cin >> ch; if(ch[0] == '#') t = NULL; else { t = new BitNode; t->data = ch; CreateBiTree(t->lchild); CreateBiTree(t->rchild); } } void InOrderTraverse(BiTree t) { if(t) { string op = t->data; if(op[0]<'0' || op[0]>'9') cout << '('; InOrderTraverse(t->lchild); cout << t->data ; InOrderTraverse(t->rchild); if(op[0]<'0' || op[0]>'9') cout << ')'; } /***********************************/ } int main() { BiTree tree = new BitNode; string ch; while(cin >> ch) { tree->data = ch; CreateBiTree(tree->lchild); CreateBiTree(tree->rchild); InOrderTraverse(tree); printf("\n"); } return 0; }用c语言优化
时间: 2024-03-17 20:45:29 浏览: 49
万能头文件#include&amp;lt;bits/stdc++.h&amp;gt; using namespace std;
这段代码是用 C++ 编写的,不是 C 语言。如果要用 C 语言重写,可以考虑使用指针代替结构体类型,使用字符数组代替字符串类型,以及使用递归函数实现二叉树的创建和遍历。下面是一个可能的 C 语言实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_EXPR_LEN 100
typedef char ElemType;
typedef struct BitNode {
ElemType data;
struct BitNode *lchild, *rchild;
} BitNode, *BiTree;
void CreateBiTree(BiTree *t) {
char ch[MAX_EXPR_LEN];
scanf("%s", ch);
if (ch[0] == '#') {
*t = NULL;
} else {
*t = (BiTree) malloc(sizeof(BitNode));
(*t)->data = ch[0];
CreateBiTree(&(*t)->lchild);
CreateBiTree(&(*t)->rchild);
}
}
void InOrderTraverse(BiTree t) {
if (t) {
char op = t->data;
if (op < '0' || op > '9')
printf("(");
InOrderTraverse(t->lchild);
printf("%c", t->data);
InOrderTraverse(t->rchild);
if (op < '0' || op > '9')
printf(")");
}
}
int main() {
BiTree tree = NULL;
char expr[MAX_EXPR_LEN];
while (scanf("%s", expr) != EOF) {
CreateBiTree(&tree);
InOrderTraverse(tree);
printf("\n");
}
return 0;
}
```
注意,这里使用了动态内存分配,需要在程序结束时释放分配的空间。另外,为了方便起见,这里假设输入的表达式字符串长度不超过 100。
阅读全文