day06
树结构
// 遍历方法 先序遍历
BinarySearchTree.prototype.preOrderTraversal=function(handle){
this.preOrderTraversalNode(this.root,handle)
}
BinarySearchTree.prototype.preOrderTraversalNode=function(node,handle){
if(node!=null){
// 处理经过的节点
handle(node.key)
// 处理经过节点的左子节点
this.preOrderTraversalNode(node.left,handle)
// 处理经过节点的有子节点
this.preOrderTraversalNode(node.right,handle)
}
}
非平衡树:数据分布不均匀。
红黑树:通过一些特性来保持数的平衡。
根节点到叶节点最长路径不会超过最短路径的两倍。
插入节点保证还是红黑树,变色,左旋,右旋。
左旋:
右旋:
1.新节点n位于树的根上没有父节点:直接讲红色变成黑色。(插入的节点默认为红色)
2、新节点的父节点P是黑色:直接加入,为加入的红节点加两个黑色的null节点。
3、父P,叔U红,祖G黑:变成->父P,叔黑,祖G红。
4 父红叔黑组黑,是左儿子:变成父黑组红,进行右旋转。
5.付红输黑组黑,n是右儿子:以P作为心插入的红色节点考虑;将自己变成黑色,组便红,以组为根,进行右旋转。