首页 > 其他 > 详细

1064 Complete Binary Search Tree

时间:2020-03-03 18:30:52      阅读:81      评论:0      收藏:0      [点我收藏+]

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

思路:

一,因为二叉查找树的中序遍历序列是递增序列,所以对给出的序列进行递增排序。

二,因为完全二叉树可以通过一维数组CBT存放,且满足下面三个性质:

1,根结点下标为1;

2,当前根结点root的左孩子下标是root*2,右孩子下标是root*2+1;

3,当 当前根结点下标 root 大于 元素个数 N时,表示 是空结点。

所以可以在对完全二叉树CBT进行中序遍历时,往CBT中一个一个的插入元素。

三,顺序输出一维数组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 }

技术分享图片

 ps:

1,我一开始打算根据中序序列,和完全二叉树的性质,用中序遍历的方式构造出一棵二叉链表结构的完全二叉树,后来发现不可能~~

目前,我只能通过先序遍历的方式才能构造出一棵二叉链表结构的二叉树。

2,这是我第二次对 用一维数组表示的完全二叉树 进行中序遍历和层次遍历,,,并且两次做这道题,都没做出来~还是不熟啊~

1064 Complete Binary Search Tree

原文:https://www.cnblogs.com/keep23456/p/12403799.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!