1064 Complete Binary Search Tree

大致题意就是给出一个包含 N个非负整数的序列,然后构造出一个既是完全二叉树又是二叉查找树的二叉树,然后输出其层序遍历序列。

想了想,其实题目问的是  如何向完全二叉树的每一个结点赋值。。。

第一步,必须知道完全二叉树的存储结构是一维数组CBT,其根结点是下标1,当前根结点root的左孩子是root*2、右孩子是root*2+1。

第二步,已知二叉查找树的中序遍历序列,可以通过中序遍历的方式,向完全二叉树的每个结点赋值,最后得到一个带权值的二叉树

第三步,顺序遍历完全二叉树CBT,即为层序遍历序列。

 1 #include<iostream>
 2 #include<algorithm>
 3 using namespace std;
 4 
 5 const int maxn = 2000;
 6 int n,in[maxn] = {0},CBT[maxn] = {0},index = 0;
 7 void inorder(int root) { //中序遍历完全二叉树
 8     if(root > n) return ;//空结点,直接返回
 9     inorder(root*2); //往左子树递归
10     CBT[root] = in[index++];
11     inorder(root*2+1);//往右子树递归
12 }
13 
14 int main() {
15     cin>>n;
16     for(int i = 0; i < n; ++i)
17         cin>>in[i];
18     sort(in,in+n);
19     inorder(1); //完全二叉树的根结点下标必须是 1
20     for(int i = 1; i<= n; ++i) {
21         if(i > 1) printf(" ");
22         printf("%d",CBT[i]);
23     }
24     return 0;
25 }

 

posted @ 2020-03-03 18:15  tangq123  阅读(121)  评论(0编辑  收藏  举报