;红黑树只不过是AVL树的变种而已 ,平衡方式耕地,意味着比AVL旋转的次数少,长应用于关联数组
红黑树和AVL树在实际开发中比较常用
;AVL树二叉平衡树 适合在内存中使用速度会达到最优化,要是在文件中那么速度大大降低
;文件中适合用b+树,B+树读文件一次读的孩子结点比较多,一次read读取尽量多的结点到内存中缓存起来,下次直接从内存中返回.
;百万级别的数据存文件用c库函数利用缓冲区一次不要读两个缓冲区的内容(<4096)设计树的结构,超过就自己设计fopen喽自己做大的缓冲区,降低文件访问的次数,孩子尽量的多并且孩子是有序的方便折半查找
;程序启动读文件到内存中生成AVL树
;解决AVL树插入等于数据不行的方法
为什么不能插入等于的数据呢看例子:
1
0 2
2
2
那么这样怎么插入呢明显不知道往哪插入2了,即使能转转完也不是有序树了
1
0 2=>2=>2
解决方法:相同的挂单向链表,2的后面挂链表也不会影响查询加个next字段
如果查询2 那么就把2头节点返回去(返回迭代器),你自己用迭代器循环要哪个2自己判断挑选
如果新插入一个2 那么就把2插入到头部,O(1)阶的插入
1
0 2=>[2]=>2=>2
;如果挂数组就比较麻烦了,如果有很多相同的那么就不知道多个的数组够用,动态数组又浪费时间
;delete (void*)类指针 不会调用析构函数
用在删除链表用循环代替默认的析构函数递归调用方式,性能提高
;两个孩子如果交换位置还要交换链表才行
1
0 2=>2=>2=>2
3=>3=>3=>3
1
0 2=>2=>2=>2
3=>3=>3=>3
2的next等于3的next ,3的next等于2的next
时间: 2024-10-10 16:56:06