2013.12.21

来源:互联网 发布:淘宝上卖的jbl音响 编辑:程序博客网 时间:2024/04/28 04:43

* 二叉树tips

  1. 二叉树执行查找,删除,插入操作的效率都是O(logN);

      有序数组执行查找操作的效率是O(logN),插入,删除操作的效率很低为O(N);

      链表执行插入,删除操作的效率是O(1),查找的效率是O(N);

  2. 可以用数组形式表示树,也可以用引用形式表示;

* 当插入二叉树的数值有序时,会导致二叉树的不平衡,当树没有分支的话,其实就是一个链表;

* 红-黑规则:

  1. 每一个结点不是红色就是黑色;

  2. 根总是黑色的;

  3. 如果节点是红色的,那么它的子结点一定是黑色的;

  4. 从根到叶结点或空子结点的每条路径,必须包含相同数目的黑色结点;

* 下行路途中的颜色变换消除了旋转造成的树的上方任何规则的违规情况,保证了经过1/2次的旋转,使得树重新成为正确的红-黑树;

* 旋转,内侧结点的横向移动现象;

* 红-黑树插入结点时,需要的操作:

  1. 下行路途中的颜色变换,父结点为黑,两个子结点为红,则颜色变换,有可能违反规则3,因此会导致操作2的发生;

  2. 下行路途中的旋转;

      a. 违反规则的结点为内侧结点;

      b. 违反规则的结点为外侧结点;

      旋转颜色变换操作,与结点插入时的一样;

  3. 结点插入时的旋转;

      a. 父结点为黑色;

      b. 父结点为红色,插入位置为外侧子孙结点,两次颜色变换,祖父结点以及父结点;一次旋转(以祖父结点为顶内旋);

      c. 父结点为红色,插入位置为内册子孙结点,两次颜色变换,祖父结点以及插入结点;两次旋转(以父结点为顶外旋+以祖父结点为顶内旋);

      d. 其他可能情况:兄弟结点(当P为红色时,兄弟结点只能为黑色,这样会违反规则4;P为黑色时,直接插入,不需要旋转),叔结点(与父结点颜色相反的话会违反规则4;与父结点同为红色的话,会在操作1时都变为黑色,同为黑色时,直接插入结点即可,不需要旋转)都不可能存在;

* 可以通过为删除结点做一个标记而非实际的删除来规避复杂的删除过程;

* 红-黑树的效率:平均每次插入都需要进行一次旋转,虽然复杂度也为O(logN),但是要比普通的二叉树慢;

* AVL树的效率: 插入一个结点需要对树扫描两次,一次向下插入结点,一次i向上平衡树,其复杂度为O(logN),不如红-黑树效率高;


挑战:时间充足时,实现红-黑树;

0 0
原创粉丝点击