//本文档主要实现通过正确的括号表示法表示的二叉树字符串创建二叉树
#include<iostream>
using namespace std;
#define LEN 1000
//定义二叉树节点的数据结构
struct BTNode
{
char data;
BTNode*left;
BTNode*right;
};
//创建二叉树
void CreateBTNode(BTNode* &root,char*str);
//输出二叉树字符串的括号表示方法
void PrintBTNode(BTNode*root);
int main()
{
char str[LEN];
BTNode*root=NULL;
printf("请输入正确的二叉树括号表示法的字符串");
scanf("%s",str);
CreateBTNode(root,str);
PrintBTNode(root);
return 0;
}
void CreateBTNode(BTNode* &root,char *str)
{
if(*str=='\0')
{
root=NULL;
return;
}
int flag=0,top=-1;
BTNode* Tank[LEN],*temp;
while((*str)!='\0')
{
switch(*str)
{
case '(':
Tank[++top]=temp;
flag=1;
break;
case ',':
flag=2;
break;
case ')':
top--;
break;
default:
if(!root)
{
root=new BTNode;
root->data=*str;
root->left=NULL;
root->right=NULL;
temp=root;
}
else
{
temp=new BTNode;
temp->data=*str;
temp->left=NULL;
temp->right=NULL;
if(flag==1)
{
Tank[top]->left=temp;
}
else
{
Tank[top]->right=temp;
}
}
}
str++;
}
}
void PrintBTNode(BTNode*root)
{
if(!root)
return;
printf("%c",root->data);
if(!root->left && !root->right)
return;
printf("(");
PrintBTNode(root->left);
printf(",");
PrintBTNode(root->right);
printf(")");
}