数据结构实验之二叉树的建立与遍历 分类: 树 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;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。