二叉树sdutoj1303

来源:互联网 发布:淘宝新手怎样增加粉丝 编辑:程序博客网 时间:2024/04/28 00:03

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;}


0 0