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

来源:互联网 发布:大数据时代 社会学 编辑:程序博客网 时间:2024/05/15 17:55

数据结构实验之二叉树的建立与遍历Crawling in process...Crawling failedTime Limit:1000MS    Memory Limit:65536KB     64bit IO Format:%lld & %llu

SubmitStatus Practice SDUTOJ 2136

Description

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

Input

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

Output

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

Sample Input

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

Sample Output

cbegdfacgefdba35

Hint








#include <stdio.h>#include <string.h>#include <stdlib.h>#include <malloc.h>struct node{    int data;    struct node *l,*r;};struct node *p;int count=0;struct node *creat(struct node *p){    char ch;    scanf("%c",&ch);    if (ch==',')        p = NULL;    else    {        p=(struct node*)malloc(sizeof(struct node));        p->data = ch;        p->l = creat(p->l);        p->r = creat(p->r);    }    return p;}void zhongxu(struct node *p){    if (p)    {        zhongxu(p->l);        printf("%c",p->data);        zhongxu(p->r);    }}void houxu(struct node *p){    if (p)    {        houxu(p->l);        houxu(p->r);        printf("%c",p->data);    }}int jiedian(struct node *p){    if(p)    {        if((p->l==NULL)&&(p->r==NULL))            count++;        jiedian(p->l);        jiedian(p->r);    }    return 0;}int deep(struct node *p){    int l1,r1;    if(!p)        return 0;    l1 = deep(p->l);    r1 = deep(p->r);    return l1>r1?l1+1:r1+1;}int main(){    struct node *root;    root = creat(p);    zhongxu(root);    printf("\n");    houxu(root);    printf("\n");    jiedian(root);    printf("%d\n",count);    printf("%d\n",deep(root));    return 0;}


0 0
原创粉丝点击