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

来源:互联网 发布:淘宝上买摩托车被骗了 编辑:程序博客网 时间:2024/05/18 03:30

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

Time Limit: 1000MS Memory limit: 65536K

题目描述

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

输入

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

输出

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

示例输入

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

示例输出

cbegdfacgefdba35
参考学长代码写的,现在还不明白为什么求深度函数返回值不是0;
#include <stdio.h>#include <stdlib.h>#include <string.h>int sd=0,yz=0;struct node{    char data;    struct node *l,*r;};struct node *build(struct node *t){    char c;    c=getchar();    if(c==',')        t=NULL;    else    {        t=(struct node*)malloc(sizeof(struct node));        t->data=c;        t->l=build(t->l);        t->r=build(t->r);    }    return t;}void zx(struct node *t){    if(t!=NULL)    {        zx(t->l);        printf("%c",t->data);        zx(t->r);    }}void hx(struct node *t){    if(t!=NULL)    {        hx(t->l);        hx(t->r);        printf("%c",t->data);    }}void yezishu(struct node *t){    if(t!=NULL)    {        if(t->l==NULL&&t->r==NULL)            yz++;        else        {            yezishu(t->l);            yezishu(t->r);        }    }}int shendu(struct node *t){    int a=0,b=0;    if(t!=NULL)    {        a=shendu(t->l);        b=shendu(t->r);        if(a>b)return a+1;        else return b+1;    }    else return 0;}int main(){    struct node *t=NULL;    t=build(t);    zx(t);    printf("\n");    hx(t);    printf("\n");    yezishu(t);    printf("%d\n",yz);    sd=shendu(t);    printf("%d",sd);    return 0;}
#include<stdio.h>#include<stdlib.h>#include<string.h>int s=0;struct node{char data;struct node *l,*r;}m[10000];int creat(){char c;int p=s;s++;c=getchar();if(c==',')return -1;else{m[p].data=c;m[p].l=creat();m[p].r=creat();return p;}}void zhongxu(int n){if(m[n].l!=-1)zhongxu(m[n].l);printf("%c",m[n].data);if(m[n].r!=-1)zhongxu(m[n].r);}void houxu(int n){if(m[n].l!=-1)houxu(m[n].l);if(m[n].r!=-1)houxu(m[n].r);printf("%c",m[n].data);}int yezishu(int n){int a=0;if(m[n].l==-1&&m[n].r==-1)return 1;if(m[n].l!=-1)a+=yezishu(m[n].l);if(m[n].r!=-1)a+=yezishu(m[n].r);return a;}int shendu(int n){int ll=0,rr=0;if(m[n].r==-1&&m[n].l==-1)return 1;if(m[n].l!=-1)ll=shendu(m[n].l);if(m[n].r!=-1)rr=shendu(m[n].r);    return rr>ll?rr+1:ll+1;}void main(){int n;n=creat();zhongxu(n);printf("\n");houxu(n);printf("\n%d\n",yezishu(n));printf("%d",shendu(n));}



 

0 0