/*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. HTTP协议的安全性--全站HTTPS

    HTTP Basic Authentication很容易让攻击者监听并获取用户名密码.使用Base64来encode用户名密码也只是为将用户名和口令中的不兼容字符转换为均与HTTP协议兼容的字符集. ...

  2. HDU - 5685 Problem A(逆元)

    这题我第一次想的就是直接模拟,因为我是这样感觉的,输入n是3次方,长度是5次方,加起来才8次方,里面的操作又不复杂,感觉应该能过,然而不如我所料,TLE了,玛德,这是第一次的代码. #include ...

  3. 关于htmlspecialchars实体字符转码的问题

    php对post过来的数据进行实体字符转码,我的页面编码是gb2312,刚开始是这样: $post = htmlspecialchars ( $post); 取到的$post值为空,但是有时候是好的( ...

  4. H桥电路

    电路特点:有三极管组成4个桥的腿,中间可以使电容或是电机. 应用:直流电机的正反转控制.DC-AC逆变电源(脉冲直流变为周期交流) 关键点:同一个时刻只能对角的一对三极管导通,同侧不能一块导通,共2对 ...

  5. Java拾穗

    1.Class.forName("com.wzh.test.loadClass"); Class.forName("com.mysql.jdbc.Driver" ...

  6. SSH学习笔记目录

    1.Spring_2000_Spring_Hibernate_HibernateTemplate

  7. Python应用01 原始Python服务器

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 之前我的Python教程中有人留言,表示只学Python没有用,必须学会一个框架( ...

  8. java小程序 示例 菲薄垃圾数列

    package com.test; import java.util.Scanner; import org.junit.Test; import com.sun.xml.internal.ws.ap ...

  9. [Flex] ButtonBar系列——如何给ButtonBar添加一个ViewStack

    <?xml version="1.0" encoding="utf-8"?> <!--如何给ButtonBar添加一个ViewStack--& ...

  10. 零成本实现接口自动化测试 – Java+TestNG 测试Restful service

    接口自动化测试 – Java+TestNG 测试 Restful Web Service 关键词:基于Rest的Web服务,接口自动化测试,数据驱动测试,测试Restful Web Service, ...