/*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的更多相关文章

  1. PAT-1099(Build A Binary Search Tree)Java实现+二叉排序树的中序遍历和层次遍历

    Build A Binary Search Tree PAT-1099 本题有意思的一个点就是:题目已经给出了一颗排序二叉树的结构,需要根据这个结构和中序遍历序列重构一棵二叉排序树. 解法:可以根据中 ...

  2. PAT-1099(Build A Binary Search Tree)

    题目见这里 分析:分四步进行 1)根据给定的结点情况建二叉树  2)对输入的键值排序(asending) 3)对二叉树中序遍历,同时对应赋key值 4)层次遍历(队列应用) 题目并不困难,但是我误入了 ...

  3. PAT1099:Build A Binary Search Tree

    1099. Build A Binary Search Tree (30) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN ...

  4. pat1099. Build A Binary Search Tree (30)

    1099. Build A Binary Search Tree (30) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN ...

随机推荐

  1. PLSQL_性能优化工具系列16_Best Practices: Proactively Avoiding Database

    占位符 PLSQL_性能优化工具系列_Best Practices: Proactively Avoiding Database/Query Performance Issue

  2. mongodb,redis,mysql 简要对比

    本篇内容大部分不是原创,转载的会贴有链接. 准备学习下数据库,想对目前的主流数据库做一个简单的了解分析,就搜集了资料整理到了一块. 当下主流的要数NoSql数据库了,拥有强大的高并发能力. mongo ...

  3. DPI和像素

    像素(Pixel) 对于计算机的屏幕设备而言,像素(Pixel)或者说px是一个最基本的单位,就是一个点.其它所有的单位,都和像素成一个固定的比例换算关系.所有的长度单位基于屏幕进行显示的时候,都统一 ...

  4. bug_ _java.lang.IllegalArgumentException: View not attached to window manager

    ============= 1   view not attached to window manager 转自:http://hi.baidu.com/spare_h/blog/item/7fa3e ...

  5. iOS8远程通知处理

    // IOS8 新系统需要使用新的代码注册推送if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0){    [[UI ...

  6. 93、App Links (应用程序链接)实例

    •网页端statements.json文件配置说明     package_name :APP包的名. sha256.... :  APP的签名.   •应用Manifest文件声明说明 <ap ...

  7. linux nandflash驱动之MTD层

    MTD,Memory Technology Device即内存技术设备,在Linux内核中,引入MTD层为NOR FLASH和NAND FLASH设备提供统一接口.MTD将文件系统与底层FLASH存储 ...

  8. (easy)LeetCode 203.Remove Linked List Elements

    Remove all elements from a linked list of integers that have value val. ExampleGiven: 1 --> 2 --& ...

  9. cocos2d-x 利用CCLabelTTF制作文字描边与阴影效果的实现方法

    // // myttf.h// // Created by 王天宇 on 14-6-12. // // #ifndef ____SLG__myttf__ #define ____SLG__myttf_ ...

  10. java常用面板

    public class JPanelTest extends JFrame{    public JPanelTest(){        Container c=getContentPane(); ...