当前位置: 首页 > news >正文

浙大数据结构慕课课后题(04-树6 Complete Binary Search Tree)

题目要求:

A Binary Search Tree (BST) is recursively defined as a binary tree which has the following properties:

  • The left subtree of a node contains only nodes with keys less than the node's key.
  • The right subtree of a node contains only nodes with keys greater than or equal to the node's key.
  • Both the left and right subtrees must also be binary search trees.

    A Complete Binary Tree (CBT) is a tree that is completely filled, with the possible exception of the bottom level, which is filled from left to right.

    Now given a sequence of distinct non-negative integer keys, a unique BST can be constructed if it is required that the tree must also be a CBT. You are supposed to output the level order traversal sequence of this BST.

输入规格: 

Each input file contains one test case. For each case, the first line contains a positive integer N (≤1000). Then N distinct non-negative integer keys are given in the next line. All the numbers in a line are separated by a space and are no greater than 2000. 

输出规格: 

For each test case, print in one line the level order traversal sequence of the corresponding complete binary search tree. All the numbers in a line must be separated by a space, and there must be no extra space at the end of the line. 

样例输入: 

10
1 2 3 4 5 6 7 8 9 0 

样例输出: 

6 3 8 1 5 7 9 0 2 4 

题解: 

        思路如注释所示,可通过所有测试点。

#include<bits/stdc++.h>
using namespace std;
int num[1005] = {0} ,ans[1005] = {0};int compare(const void*a,const void*b){  //qsort函数的比较规则 return *(int*)a - *(int*)b;
}int GetLeftLength(int N){    //计算左子树数目int H,X,L;H = log2(N+1);X = N - pow(2, H) + 1;X < pow(2, H-1) ?  X = X : X = pow(2, H-1);L = pow(2, H-1) -1 + X;return L;
}void solve(int Left, int Right, int TRoot){int n,L,LeftTRoot,RightTRoot;n = Right - Left + 1;if(n == 0) return;            //处理长度为0,则说明已经处理完了L = GetLeftLength(n);ans[TRoot] = num[Left + L];LeftTRoot = TRoot * 2 + 1;RightTRoot = LeftTRoot + 1;solve(Left, Left + L - 1, LeftTRoot);      //递归处理左子树 solve(Left + L + 1, Right, RightTRoot); 	   //递归处理右子树 
}int main(){int N;cin>>N;for(int i = 0; i < N; i++){cin>>num[i];		}qsort(num, N, sizeof(int), compare);solve(0, N-1, 0);for(int i = 0;i < N; i++){cout<<ans[i];if(i != N-1)cout<<" ";}} 

 

 

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • linux上常见问题
  • 基于深度学习的迁移学习
  • 克服编程学习中的挫败感,收获满满的成就感
  • 打造智能工厂:基于嵌入式 C++、Qt/QML 和 MQTT 的车间设备远程监控系统(代码示例)
  • Qt —— 创建 hello world
  • STM32标准库学习笔记-4.定时器中断
  • 前端css动画transform多个属性值写法
  • #Datawhale AI夏令营第4期#多模态大模型复盘
  • 象棋布局笔记
  • 四天倒计时,SETTA会议你准备好了吗?
  • #Datawhale AI夏令营第4期#AIGC文生图方向复盘
  • STM32标准库学习笔记-9.DMA 直接存储器存取
  • MySQL数据库——表的CURD(Update)
  • Ubuntu 基础使用
  • Nginx--代理与负载均衡(扩展nginx配置7层协议及4层协议方法、会话保持)
  • 9月CHINA-PUB-OPENDAY技术沙龙——IPHONE
  • IE9 : DOM Exception: INVALID_CHARACTER_ERR (5)
  • CentOS 7 修改主机名
  • create-react-app做的留言板
  • Date型的使用
  • docker python 配置
  • ES6, React, Redux, Webpack写的一个爬 GitHub 的网页
  • Java方法详解
  • Java小白进阶笔记(3)-初级面向对象
  • JS基础之数据类型、对象、原型、原型链、继承
  • JS数组方法汇总
  • JS题目及答案整理
  • leetcode46 Permutation 排列组合
  • node学习系列之简单文件上传
  • Redis字符串类型内部编码剖析
  • spark本地环境的搭建到运行第一个spark程序
  • 安装python包到指定虚拟环境
  • 入职第二天:使用koa搭建node server是种怎样的体验
  • 提升用户体验的利器——使用Vue-Occupy实现占位效果
  • 系统认识JavaScript正则表达式
  • 详解NodeJs流之一
  • 由插件封装引出的一丢丢思考
  • 深度学习之轻量级神经网络在TWS蓝牙音频处理器上的部署
  • MiKTeX could not find the script engine ‘perl.exe‘ which is required to execute ‘latexmk‘.
  • Java性能优化之JVM GC(垃圾回收机制)
  • ​LeetCode解法汇总2808. 使循环数组所有元素相等的最少秒数
  • ​软考-高级-系统架构设计师教程(清华第2版)【第12章 信息系统架构设计理论与实践(P420~465)-思维导图】​
  • # 透过事物看本质的能力怎么培养?
  • #ifdef 的技巧用法
  • #NOIP 2014# day.2 T2 寻找道路
  • #基础#使用Jupyter进行Notebook的转换 .ipynb文件导出为.md文件
  • #前后端分离# 头条发布系统
  • #我与Java虚拟机的故事#连载04:一本让自己没面子的书
  • %3cscript放入php,跟bWAPP学WEB安全(PHP代码)--XSS跨站脚本攻击
  • (2)(2.10) LTM telemetry
  • (6)【Python/机器学习/深度学习】Machine-Learning模型与算法应用—使用Adaboost建模及工作环境下的数据分析整理
  • (Mirage系列之二)VMware Horizon Mirage的经典用户用例及真实案例分析
  • (Spark3.2.0)Spark SQL 初探: 使用大数据分析2000万KF数据
  • (zt)最盛行的警世狂言(爆笑)
  • (三)Kafka离线安装 - ZooKeeper开机自启