PAT1099
/*innner order traverse for BST will be ordered
*1.sort the value in buffer
*2.inner traverse the BST and insert the value
*3.be careful for the formatted output
*4.level traverse output using queue
*/
/*c-style code
* abusing in global variable
*not good encapsulation
*may be possible to use reference for 'start'
*/
#include <cstdio>
#include<algorithm>
#include<cstring>
#include<queue>
#define maxn 100
using namespace std;
typedef struct {
int left,right;
int value;
int inserted;
}binode;
binode bitree[maxn];
int buf[maxn];
int start=;
queue<int> q;
void middle_insert(int root)
{
if(root==-)return;
middle_insert(bitree[root].left);
if(bitree[root].left==- || bitree[bitree[root].left].inserted==)
{
bitree[root].value=buf[start];
bitree[root].inserted=;
start++;
//return ;
}
middle_insert(bitree[root].right);
}
void level_traverse()
{
int i=;
q.push();
while(!q.empty())
{
int tmp=q.front();
buf[i++]=bitree[tmp].value;
q.pop();
if(bitree[tmp].left!=-)q.push(bitree[tmp].left);
if(bitree[tmp].right!=-)q.push(bitree[tmp].right);
}
}
int main()
{
//freopen("input.txt","r",stdin);
int i,n;
while(cin>>n)
{
memset(buf,,sizeof(buf));
memset(bitree,,sizeof(bitree));
//fill(bitree,bitree+n,0); parameter must be iterator
for(i=;i<n;i++)scanf(" %d %d",&bitree[i].left,&bitree[i].right);
for(i=;i<n;i++)scanf(" %d",&buf[i]);
sort(buf,buf+n);
//for(i=0;i<n;i++)printf("%d ",buf[i]);
middle_insert();
//for(i=0;i<n;i++)printf("%d %d %d %d\n",i,bitree[i].left,bitree[i].right,bitree[i].value);
level_traverse();
for(i=;i<n;i++){
if(i<n-)printf("%d ",buf[i]);
else printf("%d\n",buf[i]);
}
}
return ;
}
IMPROVE IN C++
#include <cstdio>
#include <iostream>
#include<algorithm>
#include<cstring>
#include<queue>
#define maxn 100
using namespace std;
typedef struct {
int left,right;
int value;
int inserted;
}binode; binode bitree[maxn];
int buf[maxn];
void middle_insert(int root,int &start)
{
if(root==-)return;
middle_insert(bitree[root].left,start);
if(bitree[root].left==- || bitree[bitree[root].left].inserted==)
{
bitree[root].value=buf[start];
bitree[root].inserted=;
start++;
//return ;
}
middle_insert(bitree[root].right,start);
}
void level_traverse(binode bitree[],int buf[])
{
queue<int> q;
int i=;
q.push();
while(!q.empty())
{
int tmp=q.front();
buf[i++]=bitree[tmp].value;
q.pop();
if(bitree[tmp].left!=-)q.push(bitree[tmp].left);
if(bitree[tmp].right!=-)q.push(bitree[tmp].right);
}
}
int main()
{ freopen("input.txt","r",stdin);
int n;
while(cin>>n)
{
memset(buf,,sizeof(buf));
memset(bitree,,sizeof(bitree));
for(int i=;i<n;i++)cin>>bitree[i].left>>bitree[i].right;
for(int i=;i<n;i++)cin>>buf[i];
sort(buf,buf+n);
//for(i=0;i<n;i++)printf("%d ",buf[i]);
int start=;
middle_insert(,start);
//for(i=0;i<n;i++)printf("%d %d %d %d\n",i,bitree[i].left,bitree[i].right,bitree[i].value);
level_traverse(bitree,buf);
for(int i=;i<n;i++){
cout<<buf[i];
i==n-?cout<<endl:cout<<' ';
}
}
return ;
}
PAT1099的更多相关文章
- PAT-1099(Build A Binary Search Tree)Java实现+二叉排序树的中序遍历和层次遍历
Build A Binary Search Tree PAT-1099 本题有意思的一个点就是:题目已经给出了一颗排序二叉树的结构,需要根据这个结构和中序遍历序列重构一棵二叉排序树. 解法:可以根据中 ...
- PAT-1099(Build A Binary Search Tree)
题目见这里 分析:分四步进行 1)根据给定的结点情况建二叉树 2)对输入的键值排序(asending) 3)对二叉树中序遍历,同时对应赋key值 4)层次遍历(队列应用) 题目并不困难,但是我误入了 ...
- PAT1099:Build A Binary Search Tree
1099. Build A Binary Search Tree (30) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN ...
- pat1099. Build A Binary Search Tree (30)
1099. Build A Binary Search Tree (30) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN ...
随机推荐
- Maven使用--打包和运行
将项目进行编译.测试后,下一个重要步骤就是打包.简单执行命令mvn clean package进行打包.Maven会在打包前执行编译.测试等操作. 在打包后,执行安装任务install ...
- apache/php 开启 gzip压缩
1.php方式开启 原理: header("Content-Encoding: gzip"); echo gzencode('songjiankang'); 示例1: functi ...
- RabbitMQ介绍4 - 编程(C#客户端示例)
C#终端的说明文档: http://www.rabbitmq.com/dotnet-api-guide.html 这里介绍使用RabbitMQ的几种典型场景. 1. 简单direct模式( http: ...
- bug_ _Popwindow被魅族手机自带虚拟键挡住完美解决
======== 1 之前做了一个分享的功能,从底部弹出popwindow进行分享,但是由于部分手机自带虚拟键,如魅族X4,所以弹出的popwindow被虚拟键挡住, 在网上找了好多资料,一些资料说 ...
- 转-Android 之 使用File类在SD卡中读取数据文件
如果需要在程序中使用sdcard进行数据的存储,那么需要在AndroidMainfset.xml文件中 进行权限的配置: Java代码: <!-- 在sd中创建和删除文件的权限 --> ...
- Java 内存泄露
一.Java内存回收机制 不论哪种语言的内存分配方式,都需要返回所分配内存的真实地址,也就是返回一个指针到内存块的首地址.Java中对象是采用new或者反射的方法创建的,这些对象的创建都是在堆(Hea ...
- Timer与ScheduledThreadPoolExecutor的比较
推荐还是用第二种方法,即用ScheduledThreadPoolExecutor,因为它不需要像timer那样需要在里面再用一个线程池来保证计时的准确.(前提是线程池必须要大于1个线程) 1.time ...
- SQL Server 2008 建立分区表 脚本
/*第一步:创建分区函数*/Create partition function Part_func_Bag(varchar(20)) as range right /*正式区间for values(N ...
- Python基础10 反过头来看看
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 从最初的"Hello World",走到面向对象.该回过头来看 ...
- ubuntu 16.04 64bit安装 Julia
sudo add-apt-repository ppa:staticfloat/juliareleases sudo add-apt-repository ppa:staticfloat/julia- ...