#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>
typedef char ElemType;
#define MAXSIZE 60
typedef struct node
{
ElemType data;
struct node* lchild;
struct node* rchild;
}BTNode;
void InitBiTree(BTNode*& T)
{
T = NULL;
}
void CreateBiTree(BTNode*& T, char* str)
{
BTNode* St[MAXSIZE], * p = NULL;
int top = -1, tag, j = 0;
char ch;
T = NULL;
ch = str[j];
while (ch != '\0')
{
switch (ch)
{
case'(':
{
top++;
St[top] = p;
tag = 1;
break;
}
case')':
{
top--;
break;
}
case',':
{
tag = 2;
break;
}
default:
{
p = (BTNode*)malloc(sizeof(BTNode));
p->data = ch;
p->lchild = p->rchild = NULL;
if (T == NULL)
{
T = p;
}
else
{
switch (tag)
{
case 1:
{
St[top]->lchild = p;
break;
}
case 2:
{
St[top]->rchild = p;
break;
}
}
}
}
}
j++;
ch = str[j];
}
}
void visite(BTNode*& T)
{
if (T== NULL)
{
printf("The node does not exist\n");
}
else
{
printf("%c",T->data);
}
}
void PrintBiTree(BTNode*& T, int level)
{
if (T != NULL)
{
PrintBiTree(T->rchild, level + 1);
if (level != 0)
{
for (int i = 0; i < 4 * (level - 1); i++)
{
printf("%s"," ");
}
printf("---");
}
visite(T);
printf("\n");
PrintBiTree(T->lchild,level+1);
}
}
void DestroyBiTree(BTNode*& T)
{
if (T != NULL)
{
DestroyBiTree(T->lchild);
DestroyBiTree(T->rchild);
free(T);
}
}
int main(int argc, char* argv[])
{
BTNode* T;
InitBiTree(T);
char str[] = "A(B(D, E(G, )), C(, F))";
CreateBiTree(T,str);
PrintBiTree(T, 0);
DestroyBiTree(T);
return 0;
}