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

高级算法设计与分析 学习笔记4 二叉查找树

左子树小于父节点小于右子树。

那么如何构建一个二叉查找树呢?

如何遍历一颗树?

这个其实就是中序遍历(在中间访问根节点)

如何查找一个元素?

可以看到后面这种方法更好,虽然都是递归,但后者不需要一直调用函数。

插入元素

这种算法的复杂度显然是等于树高。假如是平衡树就好了

寻找后继节点:

后继就是在这棵树中刚好比这个点大一位的节点。如果它有右子树就好办。没有的话,我们就要找让这个节点作为其左子树一部分的第一个节点

比如说13,它没有右子树,而且往上追溯一直都是右子树(都是比它小的)等到头一回发现是左子树的,那就是它的后继

找前驱也是类似意思。

删除节点

有两个子树的,那就要找其右子树中最小的数(也就是直接后继)来当新的父节点

可以注意到这棵树的性能和初始选择的值很有关系。似乎和快排有点关系啊。

随机建立的二叉查找树:

这样可以让树尽量平衡一点。


http://www.kler.cn/a/301558.html

相关文章:

  • 2020年计挑赛往届真题(C++)
  • MySQL中将一个字符串字段按层级树状展开
  • 孙赢利_11月17日_超分周报
  • 高光谱深度学习调研
  • FFmpeg源码:avio_read_partial函数分析
  • 【日常记录-Git】git log
  • 单片机-STM32 看门狗(八)
  • 使用Ansible进行多云环境的自动化部署与管理
  • 第二期: 第四节, 裸机编程 LED 汇编代码。
  • TCP/IP模型成功与OSI模型失败的深层原因:技术、理念与市场化路径的比较
  • 【数据结构与算法 | 灵神题单 | 快慢指针(链表)篇】力扣876, 2095, 234
  • git获取最近一次提交的内容(只要message不要hash)
  • 新的Ubuntu服务器如何启用root账号和配置静态ip以及开启ssh服务
  • 第309题|证明函数单调有界的核心思路 |武忠祥老师每日一题
  • erlang学习: Mnesia Erlang数据库4
  • redis基本数据类型和常见命令
  • Vue路由的分类与使用
  • mysql树形结构返回是否叶子节点
  • JAVA数据导出为Excel
  • BERT_
  • ubuntu 20.04 部署standalone dolphinscheduler
  • 【K8S实践笔记】Kubernetes(v1.28)集群搭建部署(1)
  • 爬虫3:re正则表达式获取数据
  • 中英双语共享充电宝投放管理投资理财源码五级分销返利+地图显示模式
  • 微擎忘记后台登录用户名和密码怎么办?解决方法
  • 深入理解 JavaScript 中的 `void` 操作符