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

暑假集训 8.11 树结构练习——排序二叉树的中序遍历 sdutoj2128

2016-08-16 16:53 309 查看

树结构练习——排序二叉树的中序遍历

Time Limit: 1000MS Memory limit: 65536K

题目描述

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

输入

输入包含多组数据,每组数据格式如下。
第一行包含一个整数n,为关键值的个数,关键值用整数表示。(n<=1000)
第二行包含n个整数,保证每个整数在int范围之内。

输出

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

示例输入

1
2
2
1 20


示例输出

2
1 20


///原题 后台有bug....苦了我一上午啊....

///ACcode

#include <iostream>

using namespace std;
const int maxn=10010;
int num[maxn];

typedef struct tree
{
int data;
tree *lc,*rc; ///leftchildren and rightchildren
} tree,*Tree;

void Insert(Tree &T,int key)
{
if(T==NULL) ///如果T节点无数据 申请空间 将key放入
{
T=new tree;
T->lc=NULL;
T->rc=NULL;  ///设 左右孩子为空
T->data=key;
return ; ///结束 此次函数
}
if (key > T->data)
{
Insert(T->rc,key);
}
else ///if (key < T->data) 现在题目这地方还有bug 就是处理等于问题
{
Insert(T->lc,key);  ///递归调用
}
}

int top; ///从零开始 注意初始化
void midout(Tree &T)  /// InOrder
{
if(T)
{
midout(T->lc);
top++;
num[top]=T->data;  /// 中序输出数组下标从 1 开始
midout(T->rc);
}
}

int main()
{
int n,i,key;
Tree T;
while (cin>>n)
{
top=0;  ///初始化 0
T=NULL; ///刚开始无数据设置为空
for (i=1; i<=n; i++)
{
cin>>key;
Insert(T,key);  ///依次插入key进入排序二叉树
}
midout(T);
for (i=1; i<=top; i++)
{
cout<<num[i];
if (i!=top)
{
cout<<" ";
}
}
cout<<endl; ///控制输出格式
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息