数据结构实验之二叉树的建立与遍历

来源:互联网 发布:原油看盘软件 编辑:程序博客网 时间:2024/05/18 06:39

题目描述

       已知一个按先序序列输入的字符序列,如abc,,de,g,,f,,,(其中逗号表示空节点)。请建立二叉树并按中序和后序方式遍历二叉树,最后求出叶子节点个数和二叉树深度。

输入

 输入一个长度小于50个字符的字符串。

输出

输出共有4行:
第1行输出中序遍历序列;
第2行输出后序遍历序列;
第3行输出叶子节点个数;
第4行输出二叉树深度。

示例输入

abc,,de,g,,f,,,

示例输出

cbegdfa
cgefdba
3
5

#include <stdio.h>#include <stdlib.h>char s[60];int i;int count;struct node{  char data;  struct node*l,*r;};struct node*creat(struct node*t){        if(s[i]==',')    {       t=NULL;       i++;    }    else    {       t=(struct node*)malloc(sizeof(struct node));       t->data=s[i];       i++;       t->l=creat(t->l);       t->r=creat(t->r);    }return t;}void inorder(struct node*t){   if(t)   {      inorder(t->l);      printf("%c",t->data);      inorder(t->r);   }}void paorder(struct node*t){   if(t)   {      paorder(t->l);      paorder(t->r);      printf("%c",t->data);   }}void shu(struct node*t){    if(t)    {       if((!t->l)&&(!t->r))       {          count++;

       }       shu(t->l);       shu(t->r);    }

}int depth(struct node *t){    int ldepth,rdepth;    if(!t)        return 0;    else    {                   ldepth=depth(t->l);                   rdepth=depth(t->r);

        if(ldepth>rdepth)            return ldepth+1;        else            return rdepth+1;    }}int main(){   struct node*t;    int d;    i=0;    count=0;    gets(s);    t=creat(t);    inorder(t);    printf("\n");    paorder(t);    printf("\n");    shu(t);    printf("%d\n",count);    d=depth(t);    printf("%d\n",d);    return 0;}

0 0