该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
#include
#include
#define MAXSIZE 80
typedef int Elemtype;
int Max=-100;
typedef struct Node{
int date;
struct Node *Lchild;
struct Node *Rchild;
}BTNode;
void CreatBT(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->date=ch;
p->Lchild=p->Rchild=NULL;
if(T==NULL)
T=p; //p为二叉树的根节点
else
{
switch(tag)
{
case 1:st[top]->Lchild=p;break;
case 2:st[top]->Rchild=p;break;
default:
break;
}
}
}
j++;
ch=str[j];
}
}
int FindMaxTree(BTNode *&T)
{
if(T==NULL)
return 0;
if(T!=NULL)
{
if(T->date>Max)
Max=T->date;
FindMaxTree(T->Lchild);
FindMaxTree(T->Rchild);
}
return Max;
}
void DispBTNode(BTNode *b)
{
if (b!=NULL)
{
printf("%d",b->date);
if (b->Rchild!=NULL || b->Rchild!=NULL)
{
printf("(");
DispBTNode(b->Rchild); /*递归处理左子树*/
printf(",");
DispBTNode(b->Rchild); /*递归处理右子树*/
printf(")");
}
}
}
void main()
{
BTNode *T;
char str[]={"5(4,3)"};
CreatBT(T,str); //广义表法建立二叉树
DispBTNode(T); //广义表法打印二叉树
}