二叉搜索树的中序序列相同,则称它们彼此等价。两个等价的二叉搜索树,可能在形态上存在拓普茶艺,各个节点的垂直高度可能有所不同,但水平次序完全相同,可简化为“上下可变,左右不可变”。

1. 树高与性能

一个二叉搜索树(要求有序)需要支持的主要接口有:

  • search()
  • insert()
  • remove()

三者的时间复杂度均正比于二叉树的高度。在最坏的情况下,所有的内部结点(根和叶子除外),均为左孩子结点或右孩子结点。此时的查找效率甚至会降至 O(n)O(n),线性正比于数据集的规模。故若不能有效地控制树高,则就实际的性能而言,相比此前的向量和列表,二叉搜索树将无法体会出明显优势。

2. 结点数与树的高度

证明含 nn 个结点的二叉树的最小高度为 ⌊log2n⌋\lfloor\log_2n \rfloor(同时也是完全二叉树(线性表存储)的树高)。

高度为 hh 的二叉树结点与树高的关系为:

n≤2h+1−1

n\leq 2^{h+1}-1

等号成立,当且仅当二叉树是满树。

h≥⌈log2(n+1)⌉−1=⌊log2n⌋

h\geq \lceil\log_2(n+1)\rceil-1=\lfloor\log_2n\rfloor

从二叉搜索树到平衡二叉搜索树相关推荐

  1. 数据结构(三):非线性逻辑结构-特殊的二叉树结构:堆、哈夫曼树、二叉搜索树、平衡二叉搜索树、红黑树、线索二叉树

    在上一篇数据结构的博文<数据结构(三):非线性逻辑结构-二叉树>中已经对二叉树的概念.遍历等基本的概念和操作进行了介绍.本篇博文主要介绍几个特殊的二叉树,堆.哈夫曼树.二叉搜索树.平衡二叉 ...

  2. 二叉搜索树(平衡二叉搜索树)

    二叉搜索树 1.验证是否为二叉搜索树 中序遍历看是否为递增序列 2.平衡二叉搜索树 将升序序列转为二叉平衡搜索树 /***树的结构体* Definition for a binary tree nod ...

  3. 二叉搜索树、平衡二叉搜索树和红黑树

    文章目录 一. 二叉搜索树(Binary Sort Tree) 二. 二叉平衡搜索树(AVL) 三. 红黑树 一. 二叉搜索树(Binary Sort Tree) 二叉搜索树,又称为二叉排序树(二叉查 ...

  4. 数据结构->二叉搜索树->平衡二叉搜索树->红黑树的C++实现

    节点的定义: RBTreeNode.h // // Created by 24588 on 2022/1/12. //#ifndef TEST_RBTREENODE_H #define TEST_RB ...

  5. STL源码剖析 关联式容器 树 红黑树、二叉搜索树、平衡二叉搜索树

    所谓关联式容器,观念上类似关联式数据库(实际上则简单许多):每笔数据(每个元素)都有一个键值(key)和一个实值(value) 2.当元素被插入到关联式 容器中时,容器内部结构(可能是RB-tree, ...

  6. 《恋上数据结构第1季》平衡二叉搜索树、AVL树

    AVL树 二叉搜索树缺点分析 改进二叉搜索树 平衡(Balance) 理想平衡 如何改进二叉搜索树? 平衡二叉搜索树(Balanced Binary Search Tree) AVL树 BST 对比 ...

  7. 看动画学算法之:平衡二叉搜索树AVL Tree

    简介 平衡二叉搜索树是一种特殊的二叉搜索树.为什么会有平衡二叉搜索树呢? 考虑一下二叉搜索树的特殊情况,如果一个二叉搜索树所有的节点都是右节点,那么这个二叉搜索树将会退化成为链表.从而导致搜索的时间复 ...

  8. 牛客题霸 [将升序数组转化为平衡二叉搜索树]C++题解/答案

    牛客题霸 [将升序数组转化为平衡二叉搜索树]C++题解/答案 题目描述 给出一个升序排序的数组,将其转化为平衡二叉搜索树(BST). 题解: 二叉搜索树的定义: 二叉搜索树或者是一棵空树,或者是具有下 ...

  9. LeetCode 1382. 将二叉搜索树变平衡(中序遍历+二分递归)

    1. 题目 给你一棵二叉搜索树,请你返回一棵 平衡后 的二叉搜索树,新生成的树应该与原来的树有着相同的节点值. 如果一棵二叉搜索树中,每个节点的两棵子树高度差不超过 1 ,我们就称这棵二叉搜索树是 平 ...

最新文章

  1. [k8s] 第九章 安全认证
  2. SQLServer中进行sql除法运算结果为小数时显示0的解决方案
  3. poj 3304 Segments (几何 : 线段 直线相交)
  4. BOOL 值在 debug 和 release 模式下初始化不一样!!!
  5. LiveVideoStackCon技术培训 限量买1赠1
  6. 通过channel进行goroutine间的通信
  7. 下载——百度文库下载方法
  8. 【钉钉-场景化能力包】家校沟通
  9. 中国饭局上的座次讲究
  10. 求职必看~10分钟读懂国企、事业单位和公务员的区别
  11. linux wine编译安装目录,wine32和wine64共存编译安装方法
  12. Flink 系例 之 Fold
  13. oracle 18c ad登陆,Oracle 18c PSU
  14. java opengl 话正方形_OpenGL绘制正方形并让其移动
  15. python 自动记录时间_python记录程序运行时间的几种方法
  16. 校验手机号正则,支持166及199等手机号
  17. 深度强化学习(DRL)简介与常见算法(DQN,DDPG,PPO,TRPO,SAC)分类
  18. 使用SVM/k-NN模型实现手写数字多分类 - 清华大学《机器学习实践与应用》22春-周作业
  19. 重新整理Mybatis-05
  20. 计算网站流量,选择适合带宽或月流量

热门文章

  1. 微信 小程序 python 渲染_干货 | 微信小程序自动化测试最佳实践(附 Python 源码)...
  2. 【java学习之路】(javaWeb【后端】篇)002.Servlet
  3. Git 简介和命令行操作
  4. pcb只开窗不镀锡_只因为把高速PCB旋转了一下,结果地覆天翻……
  5. Qt之QSS:带CheckBox的QGroupBox及其样式设计
  6. 浅析error LNK2001: unresolved external symbol public: __thisc...
  7. C++ 智能指针后面 . 与 -> 运算符的一点体会
  8. 一个文科妹子的前端悲欢编程之路
  9. Redis 基础:Redis 配置
  10. 20155327结对编程练习