完全二叉搜索树

article/2025/8/25 0:03:38

完全二叉搜索树是两个概念的包含,即完全二叉树+二叉搜索树。二叉搜索树是一棵二叉树,以根结点为中心,根结点左子树的所有结点权值均小于根结点的权值,根结点右子树的所有结点权值均大于根结点的权值。

而完全二叉树指从根结点到倒数第二层满足完美二叉树,最后一层可以不完全填充,其叶子结点都靠左对齐。

(完美二叉树:又叫满二叉树,指一个深度为k(>=-1)且有2^(k+1) - 1个结点的二叉树称为完美二叉树。)

完全二叉树:

 

完全二叉搜索树的要求是按照给定序列建出一棵完全二叉树,同时这棵完全二叉树满足二叉搜索树的性质。举个例子:把0123456789这个序列建一棵完全二叉搜索树,得到的树应该是这个样子的:

 

接下来是核心算法的思路:首先我们可以把给定的序列从小到大排序,例如0123456789。然后我们想,我们最后建成的树是满足二叉搜索树的性质,即根结点左子树的所有结点的权值均小于根结点的权值,根结点右子树的所有结点的权值均大于根结点的权值,所以,如果我们知道这棵树根结点的左子树一共有n个结点,那么就可以知道根结点的权值是从小到大排列完后序列中的第n+1位的数字。为什么可以这样做?因为这利用到了完全二叉树的性质,当给定一个确定的k(k是结点数),那么这个完全二叉树就是固定不变的了。比如棵树:

0-9有是个数,也就是k=10;所以以此序列构建出的完全二叉搜索树根结点的左子树一定含有6个结点。所以根结点的值就是序列中的第7位的数字(也就是“6”)。同时我们也就可以知道“6”之后的数7、8、9是右子树的结点的值。

当我们填了第一个数根结点的值6之后,就可以递归的处理左右子树。因为如果一棵二叉树是完全二叉树的话,那么它的左子树和右子树也一定是完全二叉树。所以可以用递归处理。

例如填完根结点后,继续看左子树,根结点的左子树一共有6个结点,一棵k=6的完全二叉树的左子树一定包含三个结点,所以左子树的根节点的值填入“3”,同时知道该左子树的右结点一定包含4和5这两个结点。

核心算法代码在个人代码云:https://gitee.com/justinzeng/codes/9uhkejlxowdgy04zm26b399


http://chatgpt.dhexx.cn/article/woToSsRY.shtml

相关文章

数组模拟二叉搜索树(二叉排序树)

文章目录 1. 二叉搜索树的定义2. 二叉搜索树经典模板2.1 插入操作(建树操作)2.2 删除操作2.3 查询二叉搜索树中值为 w 的前驱/后继数值 3. 经典例题 1. 二叉搜索树的定义 二叉搜索树 (BST) 递归定义为具有以下属性的二叉树: 若它的左子树不…

是否二叉搜索树

6-21 是否二叉搜索树 (25 分) 本题要求实现函数,判断给定二叉树是否二叉搜索树。 函数接口定义: bool IsBST ( BinTree T );其中BinTree结构定义如下: typedef struct TNode *Position; typedef Position BinTree;…

数据结构-二叉搜索树

目录 二叉搜索树的概念及结构 概念 结构 二叉搜索树的基本操作 默认成员函数 默认构造函数与拷贝构造函数 赋值重载 析构函数 二叉搜索树的插入 非递归 递归 二叉搜索树的遍历 中序遍历---升序(左根右) 中序遍历---降序(右根左…

二叉搜索树的应用

文章目录 1. 二叉搜索树的应用2. 二叉搜索树的KV模型3. 关于const K导致无法erase4. 关于while (cin >> str)5. 面试oj题5.1根据二叉树创建字符串5.2二叉树的层序遍历5.3二叉树的最近公共祖先5.4 二叉搜索树与双向链表5.5从前序与中序遍历序列构造二叉树5.6二叉树的前序遍…

【C++】二叉搜索树

目录 一、二叉搜索树概念 1、概念 2、结构 3、性质 二、二叉搜索树模拟实现 1、二叉搜索树节点 2、二叉搜索树构造函数 3、二叉搜索树查找 (1)迭代版本 (2)递归版本 4、二叉搜索树插入 (1)迭代版本 (2)递归版本 5、二叉搜索树节点删除 (1)迭代版本 (2)递归版本 …

Python 二叉搜索树

二叉搜索树(BST),有时也被称为二叉排序树,是一种特殊类型的容器: 在内存中存储“项目”(例如数字,名称等)的数据结构。它们允许快速查找、添加和删除项目。二叉排序树是带根结点的二叉树,其内部结点各自存储…

构建二叉搜索树

二叉搜索树 (BST) 递归定义为具有以下属性的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值若它的右子树不空,则右子树上所有结点的值均大于或等于它的根结点的值它的左、右子树也分别为二叉搜索树 给定二叉树的具体…

【Java 数据结构】实现一个二叉搜索树

目录 1、认识二叉搜索树 2、实现一个二叉搜索树 2.1 成员变量 2.2 insert 方法 2.3 search 方法 2.4 remove 方法(重点) 3、二叉搜索树总结 1、认识二叉搜索树 从字面上来看,它只比二叉树多了搜索两个字,我们回想一下,如果要是在二…

java二叉搜索树详解

文章目录 一、概念二、相关操作2.0节点相关代码:2.1查找2.2插入2.3删除(重难点)2.4测试用例 三、小结 提示:以下是本篇文章正文内容,下面案例可供参考 一、概念 二叉搜索树又称二叉排序树 它或者是一棵空树&#xff…

二叉搜索树

目录 二叉搜索树二叉搜索树概念 增删查改接口插入递归插入查找递归查找删除递归删除 成员函数拷贝构造拷贝赋值析构 二叉搜索树的应用二叉搜索树的性能分析 二叉搜索树 二叉搜索树概念 二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的…

【数据结构】二叉搜索树

目录 一.二叉搜索树规则 二.框架 三.实现 1.查找, 插入, 删除 迭代法实现 递归法实现 2.构造, 赋值 默认构造 拷贝构造 赋值运算符重载 3.中序遍历 四.时间复杂度及稳定性 五.key模型与key/value模型 1.key模型 2.key/value模型 一.二叉搜索树规则 二叉搜索树又…

数据结构——二叉搜索树详解

二叉搜索树 一、什么是二叉搜索树 二叉搜索树(BST,Binary Search Tree),也称二叉排序树或二叉查找树。 二叉搜索树:一棵二叉树,可以为空;如果不为空,满足以下性质: 非空…

【数据结构】——二叉搜索树

目录 前言 二叉搜索树的概念 二叉搜索树的操作 树的节点实现 搜索树的基本结构 插入数据 查找 删除 拷贝构造函数 二叉搜索树的应用 前言 在c中的容器里map和set的学习需要二叉搜索树的铺垫,也为后边的的红黑树和AVL树做铺垫,也就是说,…

二叉搜索树(二叉排序树)

一.概念 二叉搜索树又称二叉排序树,具有以下性质: 若它的左子树不为空,则左子树上所有节点的值都小于根节点的值若它的右子树不为空,则右子树上所有节点的值都大于根节点的值它的左右子树也分别为二叉搜索树 注意:二…

二叉排序树(二叉查找树、二叉搜索树)(图解+完整代码)

目录 ⚽1.什么是二叉排序树 🏐2.构建二叉排序树 🏀3.二叉排序树的查找操作 🥎4.二叉排序树的删除 🎱5.完整代码 ⚽1.什么是二叉排序树 我们直接看它的性质: 若它的左子树不空,则左子树上所有结点的值…

种树:二叉树、二叉搜索树、AVL树、红黑树、哈夫曼树、B树、树与森林

虽然今天不是植树节,但是我今天想种树。 文章目录 树,什么是树?二叉树定义二叉树的创建二叉树的前中后序遍历前序遍历:中序遍历后序遍历已知前序、中序遍历结果,还原二叉树已知后序、中序遍历结果,还原二叉…

java lrucache_Java LruCache 的使用及原理

概述 LRU (Least Recently Used) 的意思就是近期最少使用算法,它的核心思想就是会优先淘汰那些近期最少使用的缓存对象。 在我们日常开发中,UI 界面进行网络图片加载是很正常的一件事情,但是当界面上的图片过于多的时候,不可能每次…

LruCache和DiskLruCache

前言 Android中的三级缓存主要就是内存缓存和硬盘缓存。 Lru(least recently used)意为最近最少使用算法,核心思想就是当缓存满时,会优先淘汰最近最少使用的缓存对象。 LruCache的使用 在Android中可以直接使用LruCache,算法原理是&#xff1…

Android LruCache 缓存

使用场景 1、场景一:图片缓存利器。 可以规定缓存大小、有效避免OOM、自动移除队尾不用的图片缓存、避免HashMap各种问题。 2、场景二:通信缓存 从服务端需要获取数据,但是当访问的数据比较大,比较多,并且是重复数…

Java——LRUCache

概念 简单来说,由于我们的空间是有限的,所以发明了这个数据结构,当我们的空间不够添加新的元素时,就会删除最近最少使用的元素。 其底层逻辑通过哈希表和链表共同实现。哈希表中存储链表的每一个元素,方便进行元素的…