一、二叉树(60分)
给你一个整数序列,用这些数构成一个完全二叉排序树,输出此二叉树的层序遍历序列。输入的第一行是一个整数n,表示这个整数序列的长度,输入的第二行包含n个整数,每个数代表完全二叉排序树的一个节点,现在需要输出由这n个整数构成的完全二叉排序树的层序遍历序列。
输入样例:
18
56 987 -25 0 1021 -238 399 12 77 -1 72190 -25 -168 -41367 3218 12 0 -25
输出样例:
12 -1 987 -25 0 77 3218 -238 -25 0 12 56 399 1021 72190 -41367 -168 -25
个人思路,先排序输入数组得到完全二叉树的中序遍历序列,然后构建一个完全二叉索引树(这颗完全二叉树的节点存储的值是它的层数)中序遍历完全二叉索引树得到的序列,就是前面这个排完序的数组每个元素对应层数。然后再按层数输出就行。
#include <bits/stdc++.h>
using namespace std;
vector<int>data;
vector<int>ind;
vector<int>order_data;//存放index完全二叉树的中序遍历
int n;
//中序遍历
void visits(int root){
if(root>=n)
return;//超过节点范围了
else{
visits(2*root+1);//左子树
order_data.push_back(ind[root]);
visits(2*root+2);//右子树
}
}
int