树
AVL和红黑树
平衡二叉树AVL
特殊的二叉排序树,左右子树都是平衡二叉树,左右子树高度差绝对值不超过1,logn。
它的存在是为了优化二叉排序树,防止一边太深。
红黑树
也是二叉排序树,每个节点增加一个存储为来存颜色。
弱平衡,AVL太严格了,红黑树旋转次数少。
没有一条路径比其他路径长2倍,任意节点到叶节点的黑色节点数目相同。
所有节点非红即黑,首尾黑,红节点的孩子必黑。
两者区别
AVL高度平衡,红黑树弱平衡;
频繁插入删除,AVL效率下降;红黑树插入最多2次,删除最多3次。
哈夫曼编码
哈夫曼树:根据查找习惯建立一颗更快更合适的满二叉树,条件时每个单词出现的频率(权值)。搜索频率越高的单词越靠近树根,通过频率和节点离root的距离计算Wpl(带权路径长)=∑Li x Pi,最小化这个带权路径长得到的树就是哈夫曼树。
哈夫曼编码也叫霍夫曼编码,无前缀编码,可变字长编码,平均长度最短。应用于数据压缩。用字符在文件中出现的频率来建立的。
频率排序队列中,将频率最小的两个字符出队列,作为两个叶节点(值是频率),两频率之和作为父节点,然后将这个和的值加入到总的频率排序队列中。在重复上面的步骤。
B+树
多路搜索树,为磁盘或其他直接存储辅助设备而设计的平衡查找树。
每个节点可以有多个孩子,按照关键字大小有序排序。
特点:
每个节点上的指针上限为2d而不是2d+1(d为节点的出度)
内节点不存储data,只存储key
叶子节点不存储指针
红黑树旋转
能保持二叉搜索树的性质的局部操作,左旋和右旋,通过改变某些节点的颜色和指针结构保持红黑树的性质。