
简介
该用户还未填写简介
擅长的技术栈
可提供的服务
暂无可提供的服务
a、从根开始比较,查找,比根大则往右边走查找,比根小则往左边走查找。b、最多查找高度次,走到到空,还没找到,这个值不存在。
二叉搜索树虽可以缩短查找的效率,但如果数据有序或接近有序二叉搜索树将退化为单支树,查找元素相当于在顺序表中搜索元素,效率低下。因此,两位俄罗斯的数学家和E.M.Landis在1962年发明了一种解决上述问题的方法:当向二叉搜索树中插入新结点后,如果能保证每个结点的左右子树高度之差的绝对值不超过1(需要对树中的结点进行调整,即可降低树的高度,从而减少平均搜索长度。一棵AVL。例:2.AVL树的插入A
1.首先我们要确保插入的节点的颜色是红色的。这是因为如果插入的节点是黑色的会影响所有的路径,因为要保证每条路径上黑色节点的数目是一样的,插入的是红节点则只用看该路径是否满足红黑树的要求。一条最短的路径就是只有黑节点的路径。(红黑树是接近平衡的,AVL树是绝对平衡,但两者的性能相近,AVL树的旋转比较多且复杂 ,红黑树相对简单)2.如果要插入的父亲节点存在且颜色是黑色的,则无需进行调整,因为满足红黑
unorder_set和unordered_map的底层存储的都是一个哈希表,他们的插入、删除和查找本质上都是哈希表的插入、删除和查找。那么如何封unorder_set和unordered_map使他们复用哈希表呢?这就和封装map和set复用红黑树的原理基本一样。
我们都知道set和map的底层都是通过红黑树来实现的,前面讲解了红黑树的原理和代码,那么如何通过红黑树的代码封装实现set和map呢。
#pragma once#include<deque>#include<vector>#include<list>namespace my{//template<class T,class Contain = std::vector<T>>//template<class T, class Contain = std::list<T>>template<class T, class Contain







