二叉树 红黑树
从开源项目中,总结三个用到红黑树的地方,并分析如何实现。
案例一:服务器高并发IO的keepalive方案,满足以下几个需求
1.每个IO都是自己的时间戳
2.每个IO收到自己的beat后,重置自己的定时器
3.若IO定时器没有收到beat,则执行IO的回调函数,并重置定时器
4.若再次没有收到beat,销毁IO,注销定时器
案例二:设计一个线程或者进程的运行体R与运行体调度器S的结构体
1.运行体R:包含运行状态(新建,准备,挂起,IO等待读,IO等待写,睡眠,延时,退出),运行体回调函数,回调参数
2.调度器S:包含栈指针,栈大小,当前运行体
3.调度器S:包含执行集合(就绪,延时,睡眠,等待)
平衡二叉树
强平衡:左右子树的高度不超过1
红黑树
红黑树是如何做到平衡的
概念
左右旋
插入 三种情况
删除 四种情况
性质:
1.每个节点是红的或黑的
2.根节点是黑的
3.每个叶子节点是黑的
4.如果一个节点是红的,则它的两个儿子是黑的
5.对每个节点,从该节点到其子孙节点的所有路径上的包含相同数目的黑节点