二叉查找树

  1. 是二叉树中最常用的一种类型。
  2. 支持快速查找一个数据,还支持快速插入、删除一个数据。
  3. 任意一个节点,其左子树的每个节点的值都要小于这个节点的值,而右子树节点的值都应大于这个节点的值。
  4. 二叉查找树不管是插入、删除还是查找操作,时间复杂度都跟树的高度成正比,即O(height)。

查询

插入

删除(复杂)

  1. 如果要删除的节点没有子节点,我们只需要直接将父节点中指向要删除节点的指针置为null。比如删除图中的节点55。
  2. 如果要删除的节点只有一个子节点,我们只需要更新父节点中指向要删除节点的指针,让它指向要删除节点的子节点就可以了。比如删除图中的节点13。
  3. 如果要删除的节点有两个子节点,这时我们需要找到这个节点的右子树中的最小节点,把它替换到要删除的节点上,然后再删除这个最小节点。比如删除图中的节点18。

平衡二叉树

  1. 必须是二叉查找树。
  2. 每个节点的左子树和右子树的高度差至多为1。
  3. 左边二叉树的节点45左子树高度2,右子树高度0,左右子树高度差为2-0=2,不满足条件二;
    右边二叉树的节点均满足左右子树高度差至多为1,同时它满足二叉搜索树的要求,因此它是一棵平衡二叉树。
  4. AVL树的查找、插入、删除操作在平均和最坏的情况下都是O(logn),这得益于它时刻维护着二叉树的平衡。
  5. 如果我们需要查找的集合本身没有顺序,在频繁查找的同时也经常的插入和删除,AVL树是不错的选择。不平衡的二叉查找树在查找时的效率是很低的,因此,AVL如何维护二叉树的平衡是学习重点。

二叉查找树,平衡二叉树相关推荐

  1. 普通二叉树、二叉查找树、平衡二叉树常见操作汇总

    目录 总览表 普通二叉树 二叉查找树 平衡二叉树 总览表 普通二叉树 struct Node{int data;Node* lchild,rchild; };Node* newNode(int v){ ...

  2. 二叉树(BT)、二叉查找树(BST)、平衡二叉树(AVL)、B-Tree、B+Tree、红黑树(BRT)

    目录 树的概念 树的分类 二叉树 二叉查找树 平衡二叉树(AVL) B-Tree(平衡多路查找树) B树的关键特征 B+Tree B+树关键特征 红黑树(BRT) 左旋 右旋 时间复杂度 树形结构是一 ...

  3. ds查找—二叉树平衡因子_面试官让我手写一个平衡二叉树,我当时就笑了

    平衡二叉树对于初学者一直是一个比较复杂的知识点,因为其里面涉及到了大量的旋转操作.把大量的同学都给转晕了.这篇文章最主要的特点就是通过动画的形式演示.确保大家都能看懂.最后是手写一个平衡二叉树. 一. ...

  4. 平衡二叉树(AVL树)和红黑树区别

    1.二叉搜索树,平衡二叉树,红黑树的算法效率 操作 二叉查找树 平衡二叉树 红黑树 查找 O(n) O(logn) O(log2 n) 插入 O(n) O(logn) O(log2 n) 删除 O(n ...

  5. mysql索引使增删变慢_mysql优化之索引篇

    mysql,对it打工人,这个几乎是必备的技能之一.mysql可以解决我们平时工作中的大量的.有关增删查改的问题.所以想深入了解mysql,我觉得关键在于他的增删查改背后的算法,开搞. 面对增删查改等 ...

  6. Java面试八股文整理

    一.Java基础 1. JRE和JDK的区别 定义 JRE(Java Runtime Enviroment) 是Java的运行环境.面向Java程序的使用者,而不是开发者.如果你仅下载并安装了JRE, ...

  7. 数据结构——二叉树总结

    数据结构-二叉树总结 写在前面 二叉树遍历 递归实现先.中.后序遍历 非递归遍历 先序非递归 中序非递归 后序非递归 层次遍历 二叉树还原 先序中序建树 后序中序建树 层次中序建树 二叉树应用 二叉查 ...

  8. JAVASE相关知识点

    JavaSE 文章目录 JavaSE IDEA快捷键 EXPAND TIPS MEMO1 前置内容 MEMO2 DeBug.标识符.数据类型.进制相关 MEMO3 运算符 MEMO4 switch语句 ...

  9. 124344534453

    迭代器的细节注意点: 1.报错NoSuchElementException 2.迭代器遍历完毕,指针不会复位 3.循环中只能用一次next方法 4.迭代器遍历时,不能用集合的方法进行增加或者删除 1. ...

  10. java数据结构红黑树上旋下旋_存储系统的基本数据结构之一: 跳表 (SkipList)

    在接下来的系列文章中,我们将介绍一系列应用于存储以及IO子系统的数据结构.这些数据结构相互关联又有着巨大的区别,希望我们能够不辱使命的将他们分门别类的介绍清楚.本文为第一节,介绍一个简单而又有用的数据 ...

最新文章

  1. java web netty_基于Netty的非Servlet规范 JavaWeb框架及高性能 Java服务器
  2. aix 5.3 安装oracle 10g r2,在AIX5上安装ORACLE10G R2的步骤
  3. android数据回传多个页面_Android Day06四大组件之Activity多页面跳转和数据传递
  4. java jframe全屏_Java-将JFrame设置为全屏时,屏幕变黑
  5. PAT_B_1026_Java(15分)
  6. pycharm和python在mac里安装_MAC安装python-opencv及在pycharm下的配置
  7. Angular4中常用管道
  8. SEOer将灭绝,尽快辅佐“百毒”对手
  9. 字幕在看着你:利用恶意字幕文件劫持计算机
  10. wordpress插件_5个最佳WordPress企业目录插件
  11. 小程序如何发布体验版本
  12. tomcat启动过程报the JDBC Driver has been forcibly unregistered问题的修复过程
  13. oracle会计工作总结,EBS 创建会计科目 小结
  14. centos 添加路由命令
  15. 旅游背包(多维有界的背包问题)
  16. 云社区博客博客详情火瞳智慧通行助力疫情防控及安全出行
  17. 笔记本键盘两个ctrl键同时失灵怎么解决?
  18. 如何将所有中文的文件名称翻译成日语
  19. android输入法切换
  20. 普通用户获取详细执行计划需要哪些权限

热门文章

  1. Hikari 数据库连接池配置详解
  2. html双人可悔棋五子棋源码,MATLAB实现五子棋游戏(双人对战、可悔棋).pdf
  3. DHTMLX Suite 7.1.10 Crack
  4. kindle 安装词典
  5. 关于bootbox.js自定义弹出框样式,如修改宽度等
  6. ubuntu设置变暗时间
  7. bat调用ssis package
  8. MAVEN setting.xml配置文件详解
  9. 手机修改ntp服务器地址,修改手机ntp服务器ip地址
  10. android 仿饿了么地图,微信小程序仿饿了么地址定位、筛选与回传