二叉查找树,平衡二叉树
二叉查找树
- 是二叉树中最常用的一种类型。
- 支持快速查找一个数据,还支持快速插入、删除一个数据。
- 任意一个节点,其左子树的每个节点的值都要小于这个节点的值,而右子树节点的值都应大于这个节点的值。
- 二叉查找树不管是插入、删除还是查找操作,时间复杂度都跟树的高度成正比,即O(height)。
查询
插入
删除(复杂)
- 如果要删除的节点没有子节点,我们只需要直接将父节点中指向要删除节点的指针置为null。比如删除图中的节点55。
- 如果要删除的节点只有一个子节点,我们只需要更新父节点中指向要删除节点的指针,让它指向要删除节点的子节点就可以了。比如删除图中的节点13。
- 如果要删除的节点有两个子节点,这时我们需要找到这个节点的右子树中的最小节点,把它替换到要删除的节点上,然后再删除这个最小节点。比如删除图中的节点18。
平衡二叉树
- 必须是二叉查找树。
- 每个节点的左子树和右子树的高度差至多为1。
- 左边二叉树的节点45左子树高度2,右子树高度0,左右子树高度差为2-0=2,不满足条件二;
右边二叉树的节点均满足左右子树高度差至多为1,同时它满足二叉搜索树的要求,因此它是一棵平衡二叉树。
- AVL树的查找、插入、删除操作在平均和最坏的情况下都是O(logn),这得益于它时刻维护着二叉树的平衡。
- 如果我们需要查找的集合本身没有顺序,在频繁查找的同时也经常的插入和删除,AVL树是不错的选择。不平衡的二叉查找树在查找时的效率是很低的,因此,AVL如何维护二叉树的平衡是学习重点。
二叉查找树,平衡二叉树相关推荐
- 普通二叉树、二叉查找树、平衡二叉树常见操作汇总
目录 总览表 普通二叉树 二叉查找树 平衡二叉树 总览表 普通二叉树 struct Node{int data;Node* lchild,rchild; };Node* newNode(int v){ ...
- 二叉树(BT)、二叉查找树(BST)、平衡二叉树(AVL)、B-Tree、B+Tree、红黑树(BRT)
目录 树的概念 树的分类 二叉树 二叉查找树 平衡二叉树(AVL) B-Tree(平衡多路查找树) B树的关键特征 B+Tree B+树关键特征 红黑树(BRT) 左旋 右旋 时间复杂度 树形结构是一 ...
- ds查找—二叉树平衡因子_面试官让我手写一个平衡二叉树,我当时就笑了
平衡二叉树对于初学者一直是一个比较复杂的知识点,因为其里面涉及到了大量的旋转操作.把大量的同学都给转晕了.这篇文章最主要的特点就是通过动画的形式演示.确保大家都能看懂.最后是手写一个平衡二叉树. 一. ...
- 平衡二叉树(AVL树)和红黑树区别
1.二叉搜索树,平衡二叉树,红黑树的算法效率 操作 二叉查找树 平衡二叉树 红黑树 查找 O(n) O(logn) O(log2 n) 插入 O(n) O(logn) O(log2 n) 删除 O(n ...
- mysql索引使增删变慢_mysql优化之索引篇
mysql,对it打工人,这个几乎是必备的技能之一.mysql可以解决我们平时工作中的大量的.有关增删查改的问题.所以想深入了解mysql,我觉得关键在于他的增删查改背后的算法,开搞. 面对增删查改等 ...
- Java面试八股文整理
一.Java基础 1. JRE和JDK的区别 定义 JRE(Java Runtime Enviroment) 是Java的运行环境.面向Java程序的使用者,而不是开发者.如果你仅下载并安装了JRE, ...
- 数据结构——二叉树总结
数据结构-二叉树总结 写在前面 二叉树遍历 递归实现先.中.后序遍历 非递归遍历 先序非递归 中序非递归 后序非递归 层次遍历 二叉树还原 先序中序建树 后序中序建树 层次中序建树 二叉树应用 二叉查 ...
- JAVASE相关知识点
JavaSE 文章目录 JavaSE IDEA快捷键 EXPAND TIPS MEMO1 前置内容 MEMO2 DeBug.标识符.数据类型.进制相关 MEMO3 运算符 MEMO4 switch语句 ...
- 124344534453
迭代器的细节注意点: 1.报错NoSuchElementException 2.迭代器遍历完毕,指针不会复位 3.循环中只能用一次next方法 4.迭代器遍历时,不能用集合的方法进行增加或者删除 1. ...
- java数据结构红黑树上旋下旋_存储系统的基本数据结构之一: 跳表 (SkipList)
在接下来的系列文章中,我们将介绍一系列应用于存储以及IO子系统的数据结构.这些数据结构相互关联又有着巨大的区别,希望我们能够不辱使命的将他们分门别类的介绍清楚.本文为第一节,介绍一个简单而又有用的数据 ...
最新文章
- java web netty_基于Netty的非Servlet规范 JavaWeb框架及高性能 Java服务器
- aix 5.3 安装oracle 10g r2,在AIX5上安装ORACLE10G R2的步骤
- android数据回传多个页面_Android Day06四大组件之Activity多页面跳转和数据传递
- java jframe全屏_Java-将JFrame设置为全屏时,屏幕变黑
- PAT_B_1026_Java(15分)
- pycharm和python在mac里安装_MAC安装python-opencv及在pycharm下的配置
- Angular4中常用管道
- SEOer将灭绝,尽快辅佐“百毒”对手
- 字幕在看着你:利用恶意字幕文件劫持计算机
- wordpress插件_5个最佳WordPress企业目录插件
- 小程序如何发布体验版本
- tomcat启动过程报the JDBC Driver has been forcibly unregistered问题的修复过程
- oracle会计工作总结,EBS 创建会计科目 小结
- centos 添加路由命令
- 旅游背包(多维有界的背包问题)
- 云社区博客博客详情火瞳智慧通行助力疫情防控及安全出行
- 笔记本键盘两个ctrl键同时失灵怎么解决?
- 如何将所有中文的文件名称翻译成日语
- android输入法切换
- 普通用户获取详细执行计划需要哪些权限
热门文章
- Hikari 数据库连接池配置详解
- html双人可悔棋五子棋源码,MATLAB实现五子棋游戏(双人对战、可悔棋).pdf
- DHTMLX Suite 7.1.10 Crack
- kindle 安装词典
- 关于bootbox.js自定义弹出框样式,如修改宽度等
- ubuntu设置变暗时间
- bat调用ssis package
- MAVEN setting.xml配置文件详解
- 手机修改ntp服务器地址,修改手机ntp服务器ip地址
- android 仿饿了么地图,微信小程序仿饿了么地址定位、筛选与回传