如果用大写字母标识二叉树结点,则一颗二叉树可以用符合下面语法图的字符序列表示。试编写递归程序,由这种形式的字符序列,建立相应的二叉树的二叉链表存储结构(附图见《严蔚敏:数据结构题集(C语言版)》第45页6.70)。
输入如图所示的字符序列。
建立相应二叉树的二成叉链表存储结构,并先序遍历输出。
A(B(#,D),C(E(#,F),#))
AB#DCE#F#
#include
#include
#include
typedef struct BinTreeNode
{
char data;
struct BinTreeNode *lchild;
struct BinTreeNode *rchild;
};
struct BinTreeNode *CreateTree()
{
char s,s1;
struct BinTreeNode *q;
q=(struct BinTreeNode*)malloc(sizeof(struct BinTreeNode));
s=getchar();
s1=s;
s=getchar();
q->lchild=NULL;
q->rchild=NULL;
if(s1==',')
{
q->data=s;
s1=getchar();
if (s1=='(')
{
q->lchild=CreateTree();
q->rchild=CreateTree();
}
}
else
{
q->data=s1;
if (s=='(')
{
q->lchild=CreateTree();
q->rchild=CreateTree();
}
}
return q;
}
void PrintBinTree (struct BinTreeNode *p)
{
printf("%c",p->data);
if(p->lchild)
{
PrintBinTree(p->lchild);
}
if(p->rchild)
{
PrintBinTree(p->rchild);
}
}
int main()
{
BinTreeNode *head;
head=CreateTree();
PrintBinTree(head);
return 0;
}
#include
#include
#include
int main()
{
char str[10005];
char ans[10005];
gets(str);
int j=0;
for(int i=0;str[i]!='\0';i++)
{
if(str[i]!='('&&str[i]!=')'&&str[i]!=',')
{
ans[j]=str[i];
j++;
}
}
ans[j]='\0';
printf("%s\n",ans);
return 0;
}
补充知识:含有n个结点的不相似的二叉树有An= [1/(n+1)]*C(n 2n)棵。