zoukankan      html  css  js  c++  java
  • 红黑树——面试相关

    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是使得红黑树为平衡树的关键)

      

  • 相关阅读:
    66. 缓存字节流
    65. 练习(拷贝图片--边读边写)
    64. 输出字节流(FileOutputStream)
    63. (FileInputStream)输入字节流
    62. File类常用方法
    61. File类
    60. 枚举
    快速排序
    归并排序
    初级排序算法
  • 原文地址:https://www.cnblogs.com/chenhuan001/p/7450651.html
Copyright © 2011-2022 走看看