#include <iostream>
using namespace std;
struct biTree{
char val;
biTree* left;
biTree* right;
};
void createTree(biTree** T){
char data;
cin >> data;
if (data == '#') {
*T = NULL;
return;
}
else {
biTree* node = new biTree;
node->val = data;
*T = node;
createTree(&(*T)->left);
createTree(&(*T)->right);
}
};
void midTree(biTree* T) {
if (T == NULL) {
return;
}
else {
midTree(T->left);
cout << T->val << " ";
midTree(T->right);
}
};
void printNifixExpression(biTree** T, int depth) {
if (*T == NULL) {
return;
}
if (depth > 1 && &(*T)->left != NULL || &(*T)->right != NULL) {
cout << "(";
};
printNifixExpression(&(*T)->left, depth+1);
cout << (*T)->val;
printNifixExpression(&(*T)->right, depth+1);
if (depth > 1 && &(*T)->left != NULL || &(*T)->right != NULL) {
cout << ")";
};
};
void printNifixExpression(biTree** T){
printNifixExpression(&(*T), 1);
};
int main() {
biTree* T = NULL;
createTree(&T);
cout << "使用中序遍历打印"<<endl;
midTree(T);
cout <<endl;
printNifixExpression(&T);
return 0;
}