数据结构实验之二叉树的建立与遍历 分类: 树 2015-06-21 11:02 8人阅读 评论(0) 收藏

数据结构实验之二叉树的建立与遍历
Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^
题目描述
已知一个按先序序列输入的字符序列,如abc,,de,g,,f,,,(其中逗号表示空节点)。请建立二叉树并按中序和后序方式遍历二叉树,最后求出叶子节点个数和二叉树深度。

输入
输入一个长度小于50个字符的字符串。
输出
输出共有4行:
第1行输出中序遍历序列;
第2行输出后序遍历序列;
第3行输出叶子节点个数;
第4行输出二叉树深度。
示例输入

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

示例输出

cbegdfa
cgefdba
3
5

/*
建立二叉树,进行层次遍历和前,中,后序的遍历
*/
#include <cstdio>
#include <cmath>
#include <cstring>
#include <cstdlib>
#include <time.h>
#include <cctype>
#include <queue>
#include <stack>
#include <map>
#include <set>
#include <climits>
#include <string>
#include <iostream>
#include <algorithm>
#define RR freopen("input.txt","r",stdin)
#define WW freopen("output.txt","w",stdout)
#define INF 0x3f3f3f3f

using namespace std;

const int Max=1000001;

char str[110];

int top;

int Sum;

int Deep;

struct Tree
{
    char c;
    Tree *L;
    Tree *R;
};

struct Tree* CreatTree()
{
    Tree *p;
    p=new Tree;
    p->L=NULL;
    p->R=NULL;
    return p;
}

struct Tree* BuildTree(Tree *root)//建树
{
    if(!str[top]||str[top]==',')
    {
        return NULL;
    }
    root=CreatTree();
    root->c=str[top];
    top++;
    root->L=BuildTree(root->L);
    top++;
    root->R=BuildTree(root->R);
    return root;
}
void InOrder(Tree* root,int ans)
{
    if(!root)
    {
        if(ans>Deep)
        {
            Deep=ans;//计算树的深度
        }
        return ;
    }
    if(!root->L&&!root->R)
    {
        Sum++;//计算叶子节点
    }
    InOrder(root->L,ans+1);
    printf("%c",root->c);
    InOrder(root->R,ans+1);
}

void PostOrder(Tree* root)
{
    if(!root)
    {
        return ;
    }
    PostOrder(root->L);
    PostOrder(root->R);
    printf("%c",root->c);
}
int main()
{
    Tree * Root;
    scanf("%s",str);
    top=0;
    Sum=0;
    Deep=0;
    Root=BuildTree(Root);
    InOrder(Root,0);
    cout<<endl;
    PostOrder(Root);
    cout<<endl;
    cout<<Sum<<endl;
    cout<<Deep<<endl;
    return 0;

}

版权声明:本文为博主原创文章,未经博主允许不得转载。

posted @ 2015-06-21 11:02  一骑绝尘去  阅读(136)  评论(0编辑  收藏  举报