PAT (Advanced Level) 1099. Build A Binary Search Tree (30)
预处理每个节点左子树有多少个点。
然后确定值得时候递归下去就可以了。
#include<cstdio>
#include<cstring>
#include<cmath>
#include<vector>
#include<map>
#include<queue>
#include<stack>
#include<algorithm>
using namespace std; struct Node
{
int val;
int left;
int right;
int numL,numR;
}s[];
int n,a[];
vector<int>ans; void dfs(int x)
{
if(s[x].left!=-)
{
dfs(s[x].left);
s[x].numL=s[s[x].left].numL+s[s[x].left].numR+;
} if(s[x].right!=-)
{
dfs(s[x].right);
s[x].numR=s[s[x].right].numL+s[s[x].right].numR+;
}
} void Find(int x,int L,int R)
{
s[x].val=a[L+s[x].numL];
if(s[x].left!=-) Find(s[x].left,L,L+s[x].numL-);
if(s[x].right!=-) Find(s[x].right,L+s[x].numL+,R);
} void bfs()
{
queue<int>q;
q.push();
while(!q.empty())
{
int h=q.front(); q.pop();
ans.push_back(s[h].val);
if(s[h].left!=-) q.push(s[h].left);
if(s[h].right!=-) q.push(s[h].right);
} }
int main()
{
scanf("%d",&n);
for(int i=;i<n;i++) {
scanf("%d%d",&s[i].left,&s[i].right);
s[i].numL=s[i].numR=;
}
for(int i=;i<=n;i++) scanf("%d",&a[i]);
sort(a+,a++n);
dfs();
Find(,,n);
bfs();
for(int i=;i<ans.size();i++)
{
printf("%d",ans[i]);
if(i<ans.size()-) printf(" ");
else printf("\n");
}
return ;
}
PAT (Advanced Level) 1099. Build A Binary Search Tree (30)的更多相关文章
- 【PAT甲级】1099 Build A Binary Search Tree (30 分)
题意: 输入一个正整数N(<=100),接着输入N行每行包括0~N-1结点的左右子结点,接着输入一行N个数表示数的结点值.输出这颗二叉排序树的层次遍历. AAAAAccepted code: # ...
- pat 甲级 1099. Build A Binary Search Tree (30)
1099. Build A Binary Search Tree (30) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN ...
- PAT (Advanced Level) Practise - 1099. Build A Binary Search Tree (30)
http://www.patest.cn/contests/pat-a-practise/1099 A Binary Search Tree (BST) is recursively defined ...
- PAT Advanced 1099 Build A Binary Search Tree (30) [⼆叉查找树BST]
题目 A Binary Search Tree (BST) is recursively defined as a binary tree which has the following proper ...
- 1099. Build A Binary Search Tree (30)
A Binary Search Tree (BST) is recursively defined as a binary tree which has the following propertie ...
- PAT甲题题解1099. Build A Binary Search Tree (30)-二叉树遍历
题目就是给出一棵二叉搜索树,已知根节点为0,并且给出一个序列要插入到这课二叉树中,求这棵二叉树层次遍历后的序列. 用结构体建立节点,val表示该节点存储的值,left指向左孩子,right指向右孩子. ...
- PAT甲级——1099 Build A Binary Search Tree (二叉搜索树)
本文同步发布在CSDN:https://blog.csdn.net/weixin_44385565/article/details/90701125 1099 Build A Binary Searc ...
- 1099 Build A Binary Search Tree
1099 Build A Binary Search Tree (30)(30 分) A Binary Search Tree (BST) is recursively defined as a bi ...
- pat1099. Build A Binary Search Tree (30)
1099. Build A Binary Search Tree (30) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN ...
随机推荐
- Threading
new System.Threading.Thread(new System.Threading.ThreadStart(ReadState)).Start();
- Xcode8中添加SnapKit框架报错,编译失败
既然SnapKit的作者说SnapKit已经支持Swift3.0了,那么我们就先来适配SnapKit,首先用Xcode8新建一个空项目,利用Cocoapods导入SnapKit. Podfile 打 ...
- iOS自定义转场动画的实现
iOS中熟悉的是导航栏中的push和pop这两种动画效果,在这里我们可以自己实现自己想要的一些转场动画 下面是我自己创建转场动画的过程 1.新建一个文件继承自NSObject ,遵循协议UIViewC ...
- HTML-input标签需设置的属性
<input placeholder="这里输入门店名称" autocomplete="off" id="" name="& ...
- wordpress建站过程3——header.php
header.php中包含了一个页面的页头,也就是其他页面中重复出现的部分,包括用户登陆/登陆后显示的文字,导航条,网页logo,有的还包括轮播图. 下面就简单的贴上一个文件吧. <!DOCTY ...
- JavaScript在智能手机上的应用-用手势来改变图片大小
---------------------------------- <script type="text/javascript"> //初始化函 ...
- strlcpy() 函数
size_t strlcpy(char *dst, const char *src, size_t siz) { char *d = dst; const char *s = src; size_t ...
- OpenCV ——双线性插值(Bilinear interpolation)
1,原理 在图像的仿射变换中,很多地方需要用到插值运算,常见的插值运算包括最邻近插值,双线性插值,双三次插值,兰索思插值等方法,OpenCV提供了很多方法,其中,双线性插值由于折中的插值效果和运算速度 ...
- nodejs 命令篇
1.npm init // 生成package.json 2.npm install --save-dev gulp-jslint // 安装gulp-jslint模块,并把模块名和版本保存到pack ...
- 设置标题小图标ico
在head里添加 <link rel="shortcut icon" href="<%=request.getContextPath()%>/FlatU ...