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

完全二叉搜索树

欢迎观看我的博客,如有问题交流,欢迎评论区留言,一定尽快回复!(大家可以去看我的专栏,是所有文章的目录)
文章字体风格:
红色文字表示:重难点
蓝色文字表示:思路以及想法
 
如果大家觉得有帮助的话,感谢大家帮忙点赞!收藏!转发!

完全二叉搜索树

  • 完全二叉树的定义
  • 二叉搜索树的定义
  • 完全二叉搜索树
  • 例题—进阶实验4-3.3 完全二叉搜索树

完全二叉树的定义

倒数第二层以上都排满,最后一层从左到右一次排序,可以不排满
在这里插入图片描述

二叉搜索树的定义

根节点的左孩子小于根节点的值
根节点的右孩子大于根节点的值
在这里插入图片描述

完全二叉搜索树

既是完全二叉树,又是搜索树
在这里插入图片描述

例题—进阶实验4-3.3 完全二叉搜索树

原题链接在这里插入图片描述
本题,我们要构建二叉搜索树,所以我们需要得知所给数据的全部的值,因为得知道所给的所有值,才能进行排序平衡二叉树

所以我们就把所给的数据排序

	cin >> n;
	for(int i = 1;i<=n;i++){
		cin >> in[i];
	}
	sort(in+1,in+1+n);

然后我们再思考一下,所给一些数据,以随意一个节点作为根节点,都可以构建平衡二叉树,所以这道题,是根据完全二叉树的性质,去构建平衡二叉树,也就是根据完全二叉树的性质,去找根节点。

如何根据完全二叉树的性质,去找根节点呢,我们看图分析
在这里插入图片描述

我们已经知道,二叉搜索树的中序遍历是有序的了,那么我们就通过中序遍历的过程,给各个节点从小到大的数值赋值就好了~~~
但是怎么保证是完全二叉树呢?
可以这样,因为我们用数组存储,节点1一定是中序遍历的起始点,因为节点1是存储的是头结点,然后进行中序遍历,直到if(i>n)return;return后回到上一个递归函数,此时该节点一定就可以进行赋值了,且赋的值是,所给节点最小的值的节点(所以还需要 提前准备一下,把所给节点进行排序)

void dfs(int i){
	if(i>n)
		return;
	dfs(2*i);
	res[i] = in[++len];
	dfs(2*i+1);
} 
#include <iostream>
#include <algorithm>
using namespace std;

int in[1001];//中序遍历 
int res[1001];//层序遍历,即结果数组
int n,len;

void dfs(int i){
	if(i>n)
		return;
	dfs(2*i);
	res[i] = in[++len];
	dfs(2*i+1);
} 

int main(){
	cin >> n;
	for(int i = 1;i<=n;i++){
		cin >> in[i];
	}
	sort(in+1,in+1+n);
	dfs(1);
	for(int i = 1;i<=n;i++){
		if(i==1)
			cout << res[i];
		else
			cout << " " << res[i];
	}
	return 0;
}

相关文章:

  • 每天一个小细节:UDP协议特点与报文结构
  • Buff/Cache概念和清理方法
  • 【数据结构-树】二叉树的基本操作
  • 死磕JAVA10余年,呕心整理出了核心知识点已经做成PDF,无私奉献
  • javaweb之ajax异步交互
  • 生产实用Shell脚本合集
  • 力扣 1856. 子数组最小乘积的最大值
  • Qt实现控件的折叠收起和展开的功能
  • #传输# #传输数据判断#
  • 腾讯高工用 4 部分就讲清楚了 Spring 全家桶 + 微服务
  • Linux(WSL)安装CUDA
  • Oracle VM VirtualBox Ubuntu设置共享文件夹
  • 【机器学习】DBSCAN聚类算法的理论/实现与调参
  • 32、Java——迷你图书管理器(对象+JDBC)
  • pycharm联合Anaconda
  • IE9 : DOM Exception: INVALID_CHARACTER_ERR (5)
  • [js高手之路]搞清楚面向对象,必须要理解对象在创建过程中的内存表示
  • 【挥舞JS】JS实现继承,封装一个extends方法
  • JWT究竟是什么呢?
  • linux学习笔记
  • Perseus-BERT——业内性能极致优化的BERT训练方案
  • vue2.0项目引入element-ui
  • 第2章 网络文档
  • 第十八天-企业应用架构模式-基本模式
  • 给第三方使用接口的 URL 签名实现
  • 工作手记之html2canvas使用概述
  • 汉诺塔算法
  • 回顾 Swift 多平台移植进度 #2
  • 力扣(LeetCode)21
  • 使用 Xcode 的 Target 区分开发和生产环境
  • 容器镜像
  • ​业务双活的数据切换思路设计(下)
  • # 学号 2017-2018-20172309 《程序设计与数据结构》实验三报告
  • $ git push -u origin master 推送到远程库出错
  • (3)Dubbo启动时qos-server can not bind localhost22222错误解决
  • (ZT)北大教授朱青生给学生的一封信:大学,更是一个科学的保证
  • (二刷)代码随想录第15天|层序遍历 226.翻转二叉树 101.对称二叉树2
  • (附源码)springboot宠物医疗服务网站 毕业设计688413
  • (欧拉)openEuler系统添加网卡文件配置流程、(欧拉)openEuler系统手动配置ipv6地址流程、(欧拉)openEuler系统网络管理说明
  • (转)AS3正则:元子符,元序列,标志,数量表达符
  • .net 怎么循环得到数组里的值_关于js数组
  • .NET/C# 的字符串暂存池
  • .net6Api后台+uniapp导出Excel
  • .net连接oracle数据库
  • ::什么意思
  • @media screen 针对不同移动设备
  • [2021ICPC济南 L] Strange Series (Bell 数 多项式exp)
  • [BJDCTF2020]The mystery of ip
  • [bzoj1901]: Zju2112 Dynamic Rankings
  • [BZOJ2208][Jsoi2010]连通数
  • [C++]打开新世界的大门之C++入门
  • [caffe(二)]Python加载训练caffe模型并进行测试1
  • [Docker]十.Docker Swarm讲解
  • [Gym-102091E] How Many Groups
  • [IE9] 解决了傲游、搜狗浏览器在IE9下网页截图的问题