1.二叉树:树中的任何节点的值大于它的左子节点,且小于它的右子节点。算法
2.平衡二叉树:一棵空树或它的左右两个子树的高度差的绝对值不超过1,而且左右两个子树都是一棵平衡二叉树。.net
3.红黑树:节点是红色或者黑色的平衡二叉树,它经过颜色的约束来维持着二叉树的平衡。3d
规则:每一个节点都只能是红色或者黑色;根节点是黑色;每一个叶节点(NIL节点,空节点)是黑色的;若是一个结点是红的,则它两个子节点都是黑的。也就是说在一条路径上不能出现相邻的两个红色结点;从任一节点到其每一个叶子的全部路径都包含相同数目的黑色节点。blog
4.treeMap是红黑树算法的实现。排序
5,。红黑树增长节点:插入新节点老是红色节点 ;若是插入节点的父节点是黑色, 能维持性质 ;若是插入节点的父节点是红色, 破坏了性质. 故插入算法就是经过从新着色或旋转, 来维持性质 。递归
6.插入节点:二叉树
一.为根节点:若新插入的节点N没有父节点,则直接当作根据节点插入便可,同时将颜色设置为黑色。(如图一(1))循环
二.父节点为黑色:这种状况新节点N一样是直接插入,同时颜色为红色,因为根据规则四它会存在两个黑色的叶子节点,值为null。同时因为新增节点N为红色,因此经过它的子节点的路径依然会保存着相同的黑色节点数,一样知足规则5。(如图一(2))方法
三.若父节点P和P的兄弟节点U都为红色: 对于这种状况若直接插入确定会出现不平衡现象。怎么处理?P、U节点变黑、G节点变红。这时因为通过节点P、U的路径都必须通过G因此在这些路径上面的黑节点数目仍是相同的。可是通过上面的处理,可能G节点的父节点也是红色,这个时候咱们须要将G节点当作新增节点递归处理。im
四.若父节点P为红色,叔父节点U为黑色或者缺乏,且新增节点N为P节点的右孩子: 对于这种状况咱们对新增节点N、P进行一次左旋转。这里所产生的结果其实并无完成,还不是平衡的(违反了规则四),这是咱们须要进行状况5的操做。
五.父节点P为红色,叔父节点U为黑色或者缺乏,新增节点N为父节点P左孩子: 这种状况有多是因为状况四而产生的,也有可能不是。对于这种状况先已P节点为中心进行右旋转,在旋转后产生的树中,节点P是节点N、G的父节点。可是这棵树并不规范,它违反了规则4,因此咱们将P、G节点的颜色进行交换,使之其知足规范。开始时全部的路径都须要通过G其余们的黑色节点数同样,可是如今全部的路径改成通过P,且P为整棵树的惟一黑色节点,因此调整后的树一样知足规范5。
对于排序二叉树的建立,其添加节点的过程以下:
一、以根节点为初始节点进行检索。
二、与当前节点进行比对,若新增节点值较大,则以当前节点的右子节点做为新的当前节点。不然以当前节点的左子节点做为新的当前节点。
三、循环递归2步骤知道检索出合适的叶子节点为止。
四、将新增节点与3步骤中找到的节点进行比对,若是新增节点较大,则添加为右子节点;不然添加为左子节点。
参考文献:http://blog.csdn.net/chenssy/article/details/26668941