Description
如果用大写字母标识二叉树结点,则一棵二叉树可以用符合下面语法图的字符序列标识,试编写递归程序,由这种形式的字符序列,建立相应的二叉树的二叉链表存储结构(附图见《严蔚敏:数据结构题集(C语言版)》第45页6.70)
Input
输入如图所示的字符序列
Output
建立相应二叉树的二叉链表存储结构,并先序遍历输出
SampleInput A(B(#,D),C(E(#,F),#))
SampleOutput AB#DCE#F#
#include<stdio.h>
#include<stdlib.h.>
#include<malloc.h>
typedef struct node
{
char data;
struct node *lchild,*rchild;
}BiTNode,*BiTree;
void create(BiTree*t)
{ char s,s1;
*(t)=(BiTree)malloc(sizeof(BiTNode));
scanf("%c",&s);
s1=s;
scanf("%c",&s);
(*(t))->lchild=NULL;
(*(t))->rchild=NULL;
if(s1==',')
{
(*(t))->data=s;
scanf("%c",&s1);
if(s1=='(')
{
create(&((*(t))->lchild));
create(&((*(t))->rchild));
}
}
else
{
(*(t))->data=s1;
if(s=='(')
{
create(&((*(t))->lchild));
create(&((*(t))->rchild));
}
}
}
void print(BiTree p)
{
if(p != NULL)
{
printf("%c",p->data);//输出该结点
print(p->lchild); //遍历左子树
print(p->rchild); //遍历右子树
}
}
int main()
{
BiTree root;
create(&root);
print(root);
return 0;
}