http://acm.sdut.edu.cn/sdutoj/showproblem.php?pid=2137&cid=1303
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct node
{
char c;
struct node *r,*l;
};
struct node* xianb(struct node *tree)//先序建樹
{
char ch;
scanf("%c",&ch);
if(ch==',')tree=NULL;
else{
tree=(struct node *)malloc(sizeof(struct node));
tree->c=ch;
tree->l=xianb(tree->l);
tree->r=xianb(tree->r);
}
return tree;
}
void putzhong(struct node *tree)
{
if(tree!=NULL)
{
putzhong(tree->l);
printf("%c",tree->c);
putzhong(tree->r);
}
}
void puthou(struct node *tree)
{
if(tree!=NULL)
{
puthou(tree->l);
puthou(tree->r);
printf("%c",tree->c);
}
}
int sum;
void ye(struct node *tree)//求葉子個數
{
if(tree==NULL)return ;
if(tree->l==NULL&&tree->r==NULL)
{
sum++;
}
ye(tree->l);
ye(tree->r);
}
int depth(struct node*tree)//求深度
{
int dr,dl;
if(tree==NULL)return 0;
else
{
dl=depth(tree->l);
dr=depth(tree->r);
return (dl>dr?dl:dr)+1;
}
}
int main()
{
struct node *tree;
tree=xianb(tree);//有tree未定義的警告,但代碼是對的,警告可忽略
putzhong(tree);
printf("\n");
puthou(tree);
printf("\n");
sum=0;
ye(tree);
printf("%d\n",sum);
printf("%d\n",depth(tree));
return 0;
}