从二叉搜索树到平衡二叉搜索树
二叉搜索树的中序序列相同,则称它们彼此等价。两个等价的二叉搜索树,可能在形态上存在拓普茶艺,各个节点的垂直高度可能有所不同,但水平次序完全相同,可简化为“上下可变,左右不可变”。
1. 树高与性能
一个二叉搜索树(要求有序)需要支持的主要接口有:
- search()
- insert()
- remove()
三者的时间复杂度均正比于二叉树的高度。在最坏的情况下,所有的内部结点(根和叶子除外),均为左孩子结点或右孩子结点。此时的查找效率甚至会降至 O(n)O(n),线性正比于数据集的规模。故若不能有效地控制树高,则就实际的性能而言,相比此前的向量和列表,二叉搜索树将无法体会出明显优势。
2. 结点数与树的高度
证明含 nn 个结点的二叉树的最小高度为 ⌊log2n⌋\lfloor\log_2n \rfloor(同时也是完全二叉树(线性表存储)的树高)。
高度为 hh 的二叉树结点与树高的关系为:
n\leq 2^{h+1}-1
等号成立,当且仅当二叉树是满树。
h\geq \lceil\log_2(n+1)\rceil-1=\lfloor\log_2n\rfloor
从二叉搜索树到平衡二叉搜索树相关推荐
- 数据结构(三):非线性逻辑结构-特殊的二叉树结构:堆、哈夫曼树、二叉搜索树、平衡二叉搜索树、红黑树、线索二叉树
在上一篇数据结构的博文<数据结构(三):非线性逻辑结构-二叉树>中已经对二叉树的概念.遍历等基本的概念和操作进行了介绍.本篇博文主要介绍几个特殊的二叉树,堆.哈夫曼树.二叉搜索树.平衡二叉 ...
- 二叉搜索树(平衡二叉搜索树)
二叉搜索树 1.验证是否为二叉搜索树 中序遍历看是否为递增序列 2.平衡二叉搜索树 将升序序列转为二叉平衡搜索树 /***树的结构体* Definition for a binary tree nod ...
- 二叉搜索树、平衡二叉搜索树和红黑树
文章目录 一. 二叉搜索树(Binary Sort Tree) 二. 二叉平衡搜索树(AVL) 三. 红黑树 一. 二叉搜索树(Binary Sort Tree) 二叉搜索树,又称为二叉排序树(二叉查 ...
- 数据结构->二叉搜索树->平衡二叉搜索树->红黑树的C++实现
节点的定义: RBTreeNode.h // // Created by 24588 on 2022/1/12. //#ifndef TEST_RBTREENODE_H #define TEST_RB ...
- STL源码剖析 关联式容器 树 红黑树、二叉搜索树、平衡二叉搜索树
所谓关联式容器,观念上类似关联式数据库(实际上则简单许多):每笔数据(每个元素)都有一个键值(key)和一个实值(value) 2.当元素被插入到关联式 容器中时,容器内部结构(可能是RB-tree, ...
- 《恋上数据结构第1季》平衡二叉搜索树、AVL树
AVL树 二叉搜索树缺点分析 改进二叉搜索树 平衡(Balance) 理想平衡 如何改进二叉搜索树? 平衡二叉搜索树(Balanced Binary Search Tree) AVL树 BST 对比 ...
- 看动画学算法之:平衡二叉搜索树AVL Tree
简介 平衡二叉搜索树是一种特殊的二叉搜索树.为什么会有平衡二叉搜索树呢? 考虑一下二叉搜索树的特殊情况,如果一个二叉搜索树所有的节点都是右节点,那么这个二叉搜索树将会退化成为链表.从而导致搜索的时间复 ...
- 牛客题霸 [将升序数组转化为平衡二叉搜索树]C++题解/答案
牛客题霸 [将升序数组转化为平衡二叉搜索树]C++题解/答案 题目描述 给出一个升序排序的数组,将其转化为平衡二叉搜索树(BST). 题解: 二叉搜索树的定义: 二叉搜索树或者是一棵空树,或者是具有下 ...
- LeetCode 1382. 将二叉搜索树变平衡(中序遍历+二分递归)
1. 题目 给你一棵二叉搜索树,请你返回一棵 平衡后 的二叉搜索树,新生成的树应该与原来的树有着相同的节点值. 如果一棵二叉搜索树中,每个节点的两棵子树高度差不超过 1 ,我们就称这棵二叉搜索树是 平 ...
最新文章
- [k8s] 第九章 安全认证
- SQLServer中进行sql除法运算结果为小数时显示0的解决方案
- poj 3304 Segments (几何 : 线段 直线相交)
- BOOL 值在 debug 和 release 模式下初始化不一样!!!
- LiveVideoStackCon技术培训 限量买1赠1
- 通过channel进行goroutine间的通信
- 下载——百度文库下载方法
- 【钉钉-场景化能力包】家校沟通
- 中国饭局上的座次讲究
- 求职必看~10分钟读懂国企、事业单位和公务员的区别
- linux wine编译安装目录,wine32和wine64共存编译安装方法
- Flink 系例 之 Fold
- oracle 18c ad登陆,Oracle 18c PSU
- java opengl 话正方形_OpenGL绘制正方形并让其移动
- python 自动记录时间_python记录程序运行时间的几种方法
- 校验手机号正则,支持166及199等手机号
- 深度强化学习(DRL)简介与常见算法(DQN,DDPG,PPO,TRPO,SAC)分类
- 使用SVM/k-NN模型实现手写数字多分类 - 清华大学《机器学习实践与应用》22春-周作业
- 重新整理Mybatis-05
- 计算网站流量,选择适合带宽或月流量
热门文章
- 微信 小程序 python 渲染_干货 | 微信小程序自动化测试最佳实践(附 Python 源码)...
- 【java学习之路】(javaWeb【后端】篇)002.Servlet
- Git 简介和命令行操作
- pcb只开窗不镀锡_只因为把高速PCB旋转了一下,结果地覆天翻……
- Qt之QSS:带CheckBox的QGroupBox及其样式设计
- 浅析error LNK2001: unresolved external symbol public: __thisc...
- C++ 智能指针后面 . 与 -> 运算符的一点体会
- 一个文科妹子的前端悲欢编程之路
- Redis 基础:Redis 配置
- 20155327结对编程练习