写在前面的话
TreeMap类的底层实现用到了数据结构——树(红黑树),红黑树一直没有彻底搞清楚到底是怎么实现的,因为看到了它就想放弃,觉得不去理解清楚好像也没有多大影响。但是这个是最底层最基础也是最重要的知识,往往很容易被我们忽视,弄懂了底层才能发现问题的本质,死磕到底!先从数据结构开始,慢慢深入。
数据结构中的一些概念
数据(data)是对客观事物的符号表示,在计算机科学中是指所有能输入到计算机中并被计算机处理的所有符号的总称。我们自己的话理解就是表示现实存在的东西的一个符号。
数据元素(data element)是数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理。
一个数据元素可由若干个数据项(data item)组成。数据项是数据不可分割的最小单位。
数据对象(data object)是性质相同数据元素的集合,是数据的一个子集。
数据结构(data structure)是相互之间存在一种或多种特定关系的数据元素的集合。
数据元素之间的相互关系称为结构(structure)。4类基本结构:(1)集合;(2)线性结构;(3)树形结构;(4)图状结构或网状结构。
数据元素之间的关系在计算机中有两种不同的表示方法,顺序映像和非顺序映像,并由此得到两种不同的存储结构:顺序存储结构和链式存储结构。(具体为什么有这两种存储结构一直不是很明白,希望有知道原因的大神可以指点下不胜感激)
顺序映像的特点是借助元素在存储器中的相对位置来表示元素之间逻辑关系。
非顺序映像的特点是借助指示元素存储的指针(pointer)表示元素之间的逻辑关系。
以上这些定义都是来自《数据结构(C语言版)》这本书。
树
在计算机科学中,树(英语:tree)是一种抽象数据类型(ADT)或是实作这种抽象数据类型的数据结构,用来模拟具有树状结构性质的数据集合。它是由n(n>=1)个有限节点组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点:
- 每个节点有零个或多个子节点;
- 没有父节点的节点称为根节点;
- 每一个非根节点有且只有一个父节点;
- 除了根节点外,每个子节点可以分为多个不相交的子树;
- 节点的度:一个节点含有的子树的个数称为该节点的度;(A根节点的度为3,E的度为0)
- 树的度:一棵树中,最大的节点的度称为树的度;(最大节点的度为3,分别是A和B节点)
- 叶节点或终端节点:度为零的节点;(E,F,G,H,I,J节点的度都为0)
- 非终端节点或分支节点:度不为零的节点;
- 父亲节点或父节点:若一个节点含有子节点,则这个节点称为其子节点的父节点;
- 孩子节点或子节点:一个节点含有的子树的根节点称为该节点的子节点;
- 兄弟节点:具有相同父节点的节点互称为兄弟节点;(B,C,D都是互为兄弟节点,父节点都是A)
- 节点的层次:从根开始定义起,根为第1层,根的子节点为第2层,以此类推;
- 树的高度或深度:树中节点的最大层次;(树的深度为3)
- 堂兄弟节点:父节点在同一层的节点互为堂兄弟;
- 节点的祖先:从根到该节点所经分支上的所有节点;
- 子孙:以某节点为根的子树中任一节点都称为该节点的子孙。
- 森林:由m(m>=0)棵互不相交的树的集合称为森林;