注意: 需要去除最后面的括号!
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
//定义节点
typedef struct node
{
struct node *lchild;
struct node *rchild;
string data;
}BNode, *BTree;
string str;
//按照前序顺序建立二叉树
void createBiTree(BTree &T)
{
string tstr="O";
char c;
cin >> c;
if('#' == c) //当遇到 #时,令树的根节点为NULL,从而结束该分支的递归
T = NULL;
else
{
T = new BNode;
tstr[0]=c;
T->data=tstr;
createBiTree(T->lchild);
createBiTree(T->rchild);
}
}
//前序遍历二叉树并打印
void preTraversePrint(BTree T)
{
if(T)
{
cout<<T->data<<" ";
preTraversePrint(T->lchild);
preTraversePrint(T->rchild);
}
}
string trval2017(BTree T)
{
string t;
if(T->lchild==NULL&&T->rchild==NULL)
{
t=T->data;
}
else if(T->lchild!=NULL&&T->rchild==NULL)
{
t="("+trval2017(T->lchild)+T->data+")";
}
else if(T->lchild==NULL&&T->rchild!=NULL)
{
t="("+T->data+trval2017(T->rchild)+")";
}else if(T->lchild!=NULL&&T->rchild!=NULL)
{
t="("+trval2017(T->lchild)+T->data+trval2017(T->rchild)+")";
}
return t;
}
int main() {
BTree root;
createBiTree(root); // *+a##b##*c##-#d##
preTraversePrint(root);
cout<<endl;
str="";
str=trval2017(root);
str=str.substr(1,str.length()-2);
cout<<str<<endl;
}