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 ...
随机推荐
- mvc 控制器,视图,Razor 语法
mvc 控制器controller:响应用户请求,并修改模型model;输入数据的处理,输出view数据的提供: url入控制器的方法有关联:MVC提供的是方法调用结果: mvc model:是对应用 ...
- system函数
system两层含义: 1.正确退出后.还需要再判断,操作成功或者操作失败. 2.错误退出. #include <stdio.h> #include <stdlib.h> #i ...
- 树莓派学习:源码方式安装opencv
1:下载若干依赖项: 更新软件源:sudo apt-get update/upgrade; 依次安装一下依赖项: sudo apt-get install build-essential su ...
- Python应用01 原始Python服务器
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 之前我的Python教程中有人留言,表示只学Python没有用,必须学会一个框架( ...
- 第2章 Posix IPC
2.1 概述 Poxix IPC包含:Posix消息队列.Posix信号量.Posix共享内存 2.2 IPC名字 Posix 消息队列.Posix信号量.Posix共享内存这三种Posix IPC都 ...
- c# as
as:用于检查在兼容的引用类型之间执行某些类型的转换. Employee myEmployee = myObject as Employee; if (myEmployee != null) { } ...
- C++学习50 对字符串流的读写
文件流是以外存文件为输入输出对象的数据流,字符串流不是以外存文件为输入输出的对象,而以内存中用户定义的字符数组(字符串)为输入输出的对象,即将数据输出到内存中的字符数组,或者从字符数组(字符串)将数据 ...
- C++学习38 string字符串的增删改查
C++ 提供的 string 类包含了若干实用的成员函数,大大方便了字符串的增加.删除.更改.查询等操作. 插入字符串 insert() 函数可以在 string 字符串中指定的位置插入另一个字符串, ...
- 把exe嵌入到自己的exe中。delphi xe3
下面是一个把exe程序嵌入到我们自己的exe中.开发环境 Delphi XE3 Version 17.0.4625.53395.OS环境WIN7 SP1,由于xe3版本的引用库发生变化.换成其他版本的 ...
- sql server 作业导出放到另外一台机器执行时报错的解决方法
SQL Server2008脚本创建作业失败,提示: 引用内容消息 515,级别 16,状态 2,过程 sp_add_job,第 137 行不能将值 NULL 插入列 'owner_sid',表 'm ...