[COCI2013-2014#5] OBILAZAK
题目描述
给出一棵有 2 K − 1 2^K-1 2K−1 个节点的完全二叉树,遍历这棵树的规律如下:
-
起点是二叉树第一层的唯一一个节点。
-
如果当前节点的左孩子还没有记录到,那么就记录左孩子的编号并移动到左孩子处。
-
如果当前节点没有左孩子或者左孩子已经记录过,就记录当前节点的编号。
-
如果当前节点已经记录过,那么就记录右孩子的编号并移动到右孩子处。
-
如果当前节点及此节点的左右孩子都已经记录过,那么就移动到当前节点的父节点处。
现在给出从第一层的节点出发记录下的编号顺序,请你求出原本的完全二叉树。
输入格式
第一行,一个整数 K K K,表示这个完全二叉树有 2 K − 1 2^K-1 2K−1 个节点;
第二行, 2 K − 1 2^K-1 2K−1 个整数,表示从第一层的节点出发记录下的编号顺序。
输出格式
输出共 K K K 行,为原本的完全二叉树。
样例 #1
样例输入 #1
2
2 1 3
样例输出 #1
1
2 3
样例 #2
样例输入 #2
3
1 6 4 3 5 2 7
样例输出 #2
3
6 2
1 4 5 7
提示
【样例解释 #1】
先移动到节点 1 1 1,发现左孩子没有记录,移动到节点 2 2 2 并记录节点 2 2 2;发现节点 2 2 2 没有孩子,返回节点 1 1 1 ,发现此节点没有记录,记录节点 1 1 1;发现右孩子没有记录,移动到节点 3 3 3 并记录节点 3 3 3。
【样例解释 #2】
【数据范围】
对于 100 % 100\% 100% 的数据, 1 ≤ K ≤ 10 1\le K\le 10 1≤K≤10。
【说明】
本题分值按 COCI 原题设置,满分 80 80 80。
题目译自COCI2013_2014 CONTEST #5 T2 OBILAZAK
Scratch实现
后续
接下来我会不断用scratch来实现信奥比赛中的算法题、Scratch考级编程题实现、白名单赛事考题实现,感兴趣的请关注,我后续将继续分享相关内容