红黑树——面试相关

1. 简单的介绍下红黑树?

  a. 红黑树是一种平衡二叉查找树(简称平衡树,常见的平衡树有AVL,红黑树。AVL树的性质为:每个结点的左右子树的高度之差的绝对值最多为1。

    //add: 如果再问你什么是平衡树,回答:最大深度不大于log(n),n是树的节点个数。

  b. Java集合中的TreeSetTreeMapC++ STL中的set、map,以及Linux虚拟内存的管理,都是通过红黑树去实现的。

     //add1:为啥TreeSet和TreeMap不用其他平衡树,比如AVL? 答:虽然红黑树操作的复杂度和AVL是相同的,但是红黑树从不平衡调整到平衡所需操作更少,统计性能更优。

     //add2:TreeSet和HashSet的比较? 

    答:1) TreeSet是用红黑树实现的,操作复杂度O(log(n)),HashSet使用哈希+拉链去冲突法实现的,平均操作复杂度O(1)。所以一般查找HashSet更快。

      2) TreeSet因为是红黑树,本质是一颗二叉排序树,所以元素是排好序的。同时也需要使用Comparator接口,实现 compare方法。(不写的话会使用默认的,没有默认就会抛异常)

        HashSet则需要重写该对象对应类的equals方法和hashCode()方法(不写的话也会使用默认的)。

      3) HashSet可以放入null,但只能放入一个null。TreeSet不能放入null。(TreeSet需要排序,你怎么和一个null比较大小)

     c. 红黑树的各项操作(插入、删除、查找等)复杂度都为log(n)

  d. 红黑树的五大特征

    1)节点要么为红色,要么为黑色。(不然为啥叫红黑树;))

    2)根节点为黑色。

    3)叶子节点为黑色。 (这两个简直送分,最上面和最下面都是黑的)

    4)每个红色节点的左右孩子都是黑色。 (保证了从根节点到叶子节点不会出现连续两个红色节点)

    5)从任意节点到其每个叶子节点的所有路径,都包含相同数目的黑色节点。(4,5是使得红黑树为平衡树的关键)

  

原文地址:https://www.cnblogs.com/chenhuan001/p/7450651.html