数据结构属于理解一些源码和技术所必备的知识,比如要读懂 Java 语言中 TreeMap 和 TreeSet 的源码就要懂红黑树的数据结构,不然是无法理解源码中关于红黑树数据的操作代码的,比如左旋、右旋、添加和删除操作等。因此本课时我们就来学习一下数据结构的基础知识,方便看懂源码或者是防止面试中被问到。
我们本课时的面试题是,红黑树和二叉树有什么区别?
回答:
要回答这个问题之前,我们先要弄清什么是二叉树?什么是红黑树?
二叉树(Binary Tree)是指每个节点最多只有两个分支的树结构,即不存在分支大于 2 的节点,二叉树的数据结构如下图所示:
这是一棵拥有 6 个节点深度为 2(深度从 0 开始),并且根节点为 3 的二叉树。
二叉树有两个分支通常被称作“左子树”和“右子树”,而且这些分支具有左右次序不能随意地颠倒。
一棵空树或者满足以下性质的二叉树被称之为二叉查找树:
若任意节点的左子树不为空,则左子树上所有节点的值均小于它的根节点的值;
若任意节点的右子树不为空,则右子树上所有节点的值均大于或等于它的根节点的值;
任意节点的左、右子树分别为二叉查找树。
如下图所示,这就是一个标准的二叉查找树: