版权声明:转载请写明出处,谢谢! https://blog.csdn.net/wilson1068/article/details/88371606
树的基本知识
树是数据结构常用的类型,可能很多人以为工作中没有用到,实际上都被一些接口给隐藏起来了。如使用 Java 的 Map,里面就涉及红黑树(JDK 1.7 以上版本)。
这里先介绍一些简单的定义。
后续看情况,说一下(主要是二叉树的各种变种)满二叉树、完全二叉树、AVL树、二叉查找树、红黑树、B 树、B+ 树、B* 树、字典树、后缀树、主席树、哈夫曼树、线段树(前面已经讲了)等等。
树有关的名词
树由节点(Nodes)和 边(edges)构成。树有根节点(root),边(deges),父节点(parent),子节点(child),叶节点(leaf)。
如果最多只允许两个子节点,即所谓的二叉树(binary tree)。不同的节点如果拥有相同的父节点,则彼此互为兄弟节点(siblings)。根节点至任何节点之间有唯一路径(path),路径所经过的边数,成为路径长度(length)。根节点至任一节点的路径长度,即所谓该节点的深度(depth)。根节点的深度永远是 0。 某节点至其最深子节点(叶节点)的路径长度,成为该节点的高度(height)。整棵树的高度,便以根节点的高度来代表。节点 A->B 之间如果存在(唯一)一条路径,那么 A 称为 B 的祖代(ancestor),B 称为 A 的子代(descendant)。任何节点的大小(size)是指其所有子代(包括自己)的节点总数。
其中的各个信息:
名称 | 英文名称 | 说明 | 示例 |
---|---|---|---|
节点(结点) | node | A、B、C、D、E、F、G、H、I、J、K、L | |
节点的度 | degree | 节点的子树个数 | A 节点的度为 2,B 节点的度为 2,……,G 节点的度为 1,……,L 节点的度为 0 |
树的度 | 所有结点中最大的度数 | 此树的度为 2 | |
根节点 | root | A | |
父节点 | parent | 有子树的结点是其子树的根结点的父结点 | A 是 B、C 的父节点;B 是 D、E 的父节点;C 是 F、G 的父节点…… |
子节点(孩子、子女等) | child | A 的子节点是 B、C ;B 的子节点是 D、E ;C 的子节点是 F、G…… | |
兄弟节点 | sibling | 具有同一父结点的各结点彼此是兄弟结点 | B、C 互为兄弟节点;D、E 互为兄弟节点;F、G 互为兄弟节点…… |
叶子节点(叶节点) | leaf | 度为 0 的节点 | H、I、J、K、L |
祖先节点(祖代) | ancestor | 沿树根到某一结点路径上的所有结点都是这个结点的祖先结点 | ……;C 的祖先节点是 A;D 的祖先节点是 A、B;…… |
子孙节点(子代) | descendant | 某一结点的子树中的所有结点是这个结点的子孙 | ……;C 的子孙节点是:F、G、L;D 的子孙节点是:H、I;…… |
层次 | level | 规定根结点在 1 层,其它任一结点的层数是其父结点的层数加 1 | A 的层次是 1;B 的层次是 2;C 的层次是 2;D 的层次是 3;…… |
路径 | path | 根节点至任何节点之间有唯一路径 | |
路径的长度 | length | 路径所经过的边数,为路径长度 | A 的路径长度为 0;B的路径长度为 1;C 的路径长度为 1;D 的路径长度为 2;…… |
边 | dege | 节点到相邻节点的路径长度为 1 的路径为一条边 | |
高度 | height | 节点到最深叶子节点的路径长度为高度 | A 的高度为 3(到 H、I、J、K、L);C 的高度为为 2(到 L);F的高度为0;…… |
树的深度 | depth | 根节点至任一节点的路径长度 | A 树的深度为 3 |