您的位置:首页 > 理论基础 > 数据结构算法

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

2015-06-21 11:02 489 查看
数据结构实验之二叉树的建立与遍历

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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: