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

      

  • 相关阅读:
    夜神模拟器连接电脑
    Appium+python 多设备自动化测试
    appium+python 连接手机设备的yaml配置文件
    appium+python自动化测试连接设备
    Ansible 学习目录
    Python 时间处理
    获取本机网卡ip地址
    Ansible playbook 使用
    ansible hosts配置
    python os和sys模块使用
  • 原文地址:https://www.cnblogs.com/chenhuan001/p/7450651.html
Copyright © 2011-2022 走看看