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

来源:互联网 发布:她来听我的演唱会知乎 编辑:程序博客网 时间:2024/06/06 01:04

http://acm.sdut.edu.cn/sdutoj/showproblem.php?pid=2136&cid=1794

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

Time Limit: 1000MS Memory limit: 65536K

题目描述

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

输入

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

输出

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

示例输入

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

示例输出

cbegdfacgefdba35

#include <stdio.h>#include <stdlib.h>typedef char type;typedef struct tnode{   type data;   tnode *lc;   tnode *rc;}tnode,*tree;int leaf=0,depth;tree creat(tree &T){    char s;    scanf("%c",&s);    if(s==',')        T=NULL;    else    {        T=(tree)malloc(sizeof(tnode));        T->data=s;        T->lc=creat(T->lc);        T->rc=creat(T->rc);    }    return T;}void midorder(tree T){   if(T!=NULL)   {      midorder(T->lc);      printf("%c",T->data);      midorder(T->rc);   }}void hinorder(tree T){    if(T!=NULL)    {       hinorder(T->lc);       hinorder(T->rc);       printf("%c",T->data);    }}void countleaf(tree T){    if(T)    {        if(T->lc==NULL&&T->rc==NULL)            leaf++;        else        {            countleaf(T->lc);            countleaf(T->rc);        }    }}int countdepth(tree T){    int ldepth,rdepth;    if(!T)        return 0;    else    {        if(T->lc)            ldepth=countdepth(T->lc);        else            ldepth=0;        if(T->rc)            rdepth=countdepth(T->rc);        else            rdepth=0;        return ldepth>rdepth?ldepth+1:rdepth+1;    }}int main(){    tree T;    T=creat(T);    midorder(T);    printf("\n");    hinorder(T);    printf("\n");    countleaf(T);    depth=countdepth(T);    printf("%d\n%d\n",leaf,depth);    return 0;}


0 0
原创粉丝点击