“存在即合理”为什么需要每种树,本文不再冗余的总结每种树太多性质,就说重点。

二叉树(Binary Tree)主要包括:满二叉树、完全二叉树、二叉搜索树、平衡二叉树

性质太多,定义太复杂,理解树的样子就行。

1、满二叉树

2、完全二叉树

完全二叉树由满二叉树转化而来,也就是将满二叉树从最后一个节点开始删除,一个一个从后往前删除,剩下的就是完全二叉树。

3、二叉搜索树

二叉搜索树(又叫二叉查找树),它是具有下列性质的二叉树:

若左子树不空,则左子树上所有结点的值均小于它的根结点的值;
若右子树不空,则右子树上所有结点的值均大于或等于它的根结点的值;
左、右子树也分别为二叉搜索树。

总之:二叉搜索树中,左子树都比其根节点小,右子树都比其根节点大,递归定义

重点来了!二叉搜索树的中序遍历一定是从小到大排序的。

比如上图的中序遍历结果:1,3,4,6,7,8,10,13,14

二叉搜索树的搜索性能:

在最好的情况下,二叉搜索树的查找效率比较高,是 O(logn),其访问性能近似于二分法;

但最差时候会是 O(n),比如插入的元素是有序的,生成的二叉搜索树就是一个链表,树的一条腿特变长,这种情况下,需要遍历全部元素才行(见下图 b)。

如果我们可以保证二叉搜索树不出现上面提到的极端情况(插入的元素是有序的,导致变成一个链表),就可以保证很高的搜索效率了。

但这在插入有序的元素时不太好控制,按二叉排序树的定义,我们无法判断当前的树是否需要调整。

因此就要用到平衡二叉树(AVL )了。

4、平衡二叉树

平衡二叉树的提出就是为了保证树不至于出现二叉查找树的极端一条腿长现象,尽量保证两条腿平衡。因此它的定义如下:

定义:平衡二叉树要么是一棵空树,要么保证左右子树的高度之差不大于 1,并且子树也必须是一棵平衡二叉树。

平衡二叉树的性能:

平衡二叉树在添加和删除时需要进行复杂的旋转保持整个树的平衡,最终,插入、查找的时间复杂度都是 O(logn),性能已经相当好了。

著名的红黑树就是一种平衡二叉树!

b+树时间复杂度_满二叉树、完全二叉树、二叉搜索树、平衡二叉树相关推荐

  1. 判断一棵树是否为排序二叉树(二叉搜索树)

    问题:判断一棵树是否为排序二叉树(二叉搜索树) 思路:二叉排序树的中序遍历为一递增的排序,若果不满足这一条件,则,不是二叉树 程序实现: #include <iostream> #incl ...

  2. 什么是m叉树_树、二叉树、二叉搜索树的实现和特性

    ❝ 点赞再看,养成习惯,微信搜一搜[一角钱小助手]关注更多原创技术文章. 回复「文章」获取系列完整文章,本文 org_hejianhui/JavaStudy 已经收录,欢迎Star. ❞ 前言 本篇先 ...

  3. 树、二叉树、二叉搜索树_检查二叉树是否为BST(二叉搜索树)

    树.二叉树.二叉搜索树 Description: 描述: This article describes how to check whether a given tree is BST or not? ...

  4. 二叉树进阶--二叉搜索树

    目录 1.二叉搜索树 1.1 二叉搜索树概念 1.2 二叉搜索树操作 1.3 二叉搜索树的实现 1.4 二叉搜索树的应用 1.5 二叉搜索树的性能分析 2.二叉树进阶经典题: 1.二叉搜索树 1.1 ...

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

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

  6. (面经总结)一篇文章带你整理面试过程中关于 二叉树、二叉搜索树、平衡二叉树、B 树和 B+树的相关知识

    文章目录 一.二叉树(Binary Tree) 二.二叉搜索树(Binary Search Tree) 三.平衡二叉树(AVL Tree) 四.B树(B Tree) 五.B+树(B+ tree) 五. ...

  7. 2021-10-11 二叉树,二叉搜索树及其相关23个操作 C++实现笔记(复习用,含C指针复习)

    学数据结构到现在写的最久的一部分,简单总结一下这一周 1.考虑到未来考试要求,实现语言从java换成了C++,没想到意外的顺利 2.没别的了,干就完了 3.代码肯定有错误的地方,虽然我自认为是完美主义 ...

  8. LeetCode 98验证二叉搜素树(中序遍历)99恢复二叉搜索树

    微信搜一搜:bigsai 大家都在关注的刷题.学习数据结构和算法宝藏项目 关注回复进群即可加入力扣打卡群,欢迎划水.近期打卡: LeetCode 92反转链表Ⅱ&93复制ip地址&94 ...

  9. 将字符串转换为数组_LeetCode 树 108.将有序数组转换为二叉搜索树

    7(108) 将有序数组转换为二叉搜索树 描述 将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树. 本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 ...

最新文章

  1. 《Java程序设计》第十一周学习总结
  2. php 入口文件引入取别名,php命名空间别名/导入
  3. MySQL数据表字段内容的批量修改、复制命令
  4. boost::pfr::get相关的测试程序
  5. Scala 入门3(类、Trait、模式匹配、正则、异常、提取器、IO)
  6. TASKCTL高可用架构调度服务与安装
  7. 局域网版teamview跨网远程访问的方法分享
  8. 移动友华PT924光猫获取超级用户方法
  9. App Store 受欢迎榜单(美国区)-分析出未来方向
  10. 大型网站技术架构-第4篇 架构师
  11. Web前端农历/阴历转换
  12. 电脑连上网络,浏览器上不了网?
  13. 2022年度软考考试时间表已公布
  14. 咕咕机GT1,能用纸条传达浓浓爱意的迷你打印机
  15. 阿里云短信验证服务详细基础教程
  16. QDateEdit日历修改之QCalendarWidget 样式设置
  17. 史上最全常用正则表达式
  18. 目视管理感知规律在生产管理中的运用(zt)
  19. flash特效原理:螺旋效果
  20. 中国社交电商行业发展分析

热门文章

  1. rabbitmq的下载与安装windows-64
  2. linux运维解决ddos,运维人员该如何排查并解决DDOS攻击
  3. OpenShift 4 - 安装3Scale API Management环境
  4. OpenShift 4 之 GitOps(3)用Helm+ArgoCD部署应用,并保持配置同步
  5. (二)为AI模型训练准备影像
  6. CentOS 7.7(1908)发布
  7. HTML画笔移出画布停止,html5 canvas画布无法清除
  8. linux多cpu运行python脚本,linux系统使用python获取cpu信息脚本分享
  9. java jsch 调用shell_Java-Jsch-Shell脚本执行后退出
  10. mac的python怎么输入中文_无法在python IDE(Mac OS X)中输入unicode