您的位置:首页 > 其它

树结构练习——排序二叉树的中序遍历 分类: 树 2015-06-21 11:05 12人阅读 评论(0) 收藏

2015-06-21 11:05 537 查看
树结构练习——排序二叉树的中序遍历

Time Limit: 1000ms Memory limit: 65536K

题目描述

在树结构中,有一种特殊的二叉树叫做排序二叉树,直观的理解就是——(1).每个节点中包含有一个关键值 (2).任意一个节点的左子树(如果存在的话)的关键值小于该节点的关键值 (3).任意一个节点的右子树(如果存在的话)的关键值大于该节点的关键值。现给定一组数据,请你对这组数据按给定顺序建立一棵排序二叉树,并输出其中序遍历的结果。

输入

输入包含多组数据,每组数据格式如下。

第一行包含一个整数n,为关键值的个数,关键值用整数表示。(n<=1000)

第二行包含n个整数,保证每个整数在int范围之内。

输出

为给定的数据建立排序二叉树,并输出其中序遍历结果,每个输出占一行。

示例输入

1

2

2

1 20

示例输出

2

1 20

/*
开始的时候在遍历的时候输出WA,不明所以,后来改成计入数组就对了
*/

#include <map>
#include <set>
#include <cmath>
#include <queue>
#include <stack>
#include <cctype>
#include <cstdio>
#include <time.h>
#include <string>
#include <cstring>
#include <cstdlib>
#include <climits>
#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=10000;
int n;
int b[1100];
int top;
struct Tree
{
int Data;
Tree* Lchild;
Tree* Rchild;
}* Root;
Tree* CreatTree()
{
Tree* p;
p=new Tree;
p->Lchild=NULL;
p->Rchild=NULL;
return p;
}
void BuildTree(Tree* root,int data)//建立二叉排序树
{
if(data<root->Data)
{
if(root->Lchild)
{
BuildTree(root->Lchild,data);
}
else
{
root->Lchild=CreatTree();
root->Lchild->Data=data;
}
}
else
{
if(root->Rchild)
{
BuildTree(root->Rchild,data);
}
else
{
root->Rchild=CreatTree();
root->Rchild->Data=data;
}
}
}
void InOrder(Tree* root)//进行中序遍历
{
if(!root)
{
return ;
}
InOrder(root->Lchild);
b[top++]=root->Data;
InOrder(root->Rchild);
}
int main()
{
int a;
while(~scanf("%d",&n))
{
for(int i=0;i<n;i++)
{
scanf("%d",&a);
if(i)
{
BuildTree(Root,a);
}
else
{
Root=CreatTree();
Root->Data=a;
}
}
top=0;
InOrder(Root);
for(int i=0; i<top; i++)
{
if(i)
cout<<" ";
cout<<b[i];

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