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

来源:互联网 发布:微信小程序网站源码 编辑:程序博客网 时间:2024/06/06 17:03
数据结构实验之二叉树的建立与遍历    
    

Description

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

Input

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

Output

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

Sample Input

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

Sample Output

cbegdfa
cgefdba
3
5
#include <stdio.h>#include <string.h>#include <stdlib.h>#include <malloc.h>#include <iostream>using namespace std;struct node{    char data;    struct node *l, *r;};int sum = 0;struct node  *creat(struct node *p){    char q;    scanf("%c",&q);    if(q == ',')        p = NULL;    else    {        p = (struct node *)malloc(sizeof(struct node));        p->data = q;        p->l = creat(p->l);        p->r = creat(p->r);    }    return p;}int zhongxu(struct node *p)//中序遍历序列{    if(p)    {        zhongxu(p->l);        printf("%c",p->data);        zhongxu(p->r);    }    return 0;}int houxu(struct node *p)//后序遍历序列{    if(p)    {        houxu(p->l);        houxu(p->r);        printf("%c",p->data);    }    return 0;}int jiedian(struct node *p)//后序遍历求节点也可以中序等{    if(p)    {        jiedian(p->l);        jiedian(p->r);        if( (p->l==NULL) && (p->r==NULL) )            sum++;    }    return sum;}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(){    int sum , deep1;    struct node *head;    head = (struct node *)malloc(sizeof(struct node));    head = creat(head);    zhongxu(head);    printf("\n");    houxu(head);    printf("\n");    sum = jiedian(head);    printf("%d\n",sum);    deep1 = deep(head);    printf("%d\n",deep1);    return 0;}

0 0
原创粉丝点击