二叉树

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

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 struct BinNode{

    char data;
    struct BinNode *lchild, *rchild;
}*Bintree;

int sum=0;

void PreCreat(Bintree &p)//根据先序序列建树
{
    char ch;
    scanf("%c",&ch);
    if (ch=='
')
        return ;
    else if (ch==',')
        p = NULL;
    else
    {
        p = new BinNode;
        p->data = ch;
        PreCreat(p->lchild);
        PreCreat(p->rchild);
    }

}

void preoder2(Bintree p)//中序遍历
{


    if (p)
    {
        preoder2(p->lchild);
        printf("%c",p->data);
        preoder2(p->rchild);
    }
}

void preoder1(Bintree p)//后序遍历
{

    if (p)
    {
        preoder1(p->lchild);
        preoder1(p->rchild);
        printf("%c",p->data);
    }
}

void lefives(Bintree p)
{
    if(p)
    {
    if(p->lchild == NULL && p->rchild == NULL)
    {
        sum++;
    }
    else
    {
        lefives(p->lchild);
        lefives(p->rchild);
    }
    }
}

int deep(Bintree p)
{
    if(p)
    {
        int a = deep(p->lchild);
        int b = deep(p->rchild);
        if(a>b)
                return a+1;
        else
               return b+1;
    }
    return 0;
}
int main()
{

    Bintree p;
    p = NULL;

    PreCreat(p);//树

    preoder2(p);//中序遍历
    printf("
");

    preoder1(p);//后序遍历
    printf("
");

    lefives(p);
    printf("%d
", sum);

    deep(p);
    printf("%d
", deep(p));

    printf("
");
    return 0;
}

每天训练发现我比别人做的好慢,但是理解的更深刻,如果一开始学一个新知识点就搜模板,那么这样的人是走不远的,毕业之后带走的只有思维,什么荣誉,奖杯都已经不重要了。
原文地址:https://www.cnblogs.com/6bing/p/3931303.html