目录
1. 树的概念及结构
1.1 树的名词定义
1. 节点的度:一个节点含有的子树的个数称为该节点的度,如上图:A的度为6。
2. 叶子节点或终端节点:度为0的节点称为叶子节点,如上图:B、C、H、I...等节点为叶子节点。
3. 非终端节点或分支节点:度不为0的节点,如上图:D、E、F、G...等节点为分支节点。
4. 双亲节点或父节点:若一个节点含有子节点,则这个节点称为其子节点的父节点,如上图:A是B的父节点。
5. 孩子节点或子节点:一个节点有父节点,则这个节点是父节点的子节点,如上图:B是A的孩子节点。
6. 兄弟节点:具有相同父节点的节点互称为兄弟节点,如上图:B、C是兄弟节点。
7. 树的度:一棵树中,最大的节点的度称为树的度,如上图:树的度为6。
8. 节点的层次:从根开始定义起,根为第1层,根的子节点为第2层,以此类推。
9. 树的高度或深度:树中节点的最大层次,如上图:树的高度为4。
10. 堂兄弟节点:双亲在同一层的节点互为堂兄弟;如上图:H、I互为堂兄弟节点。
11. 节点的祖先与子孙:在一条路径中,以某个节点为视角,在你上面的节点是你的祖先,在你下面的节点是你的子孙。如上图:A-E-J-Q,以E为视角,A是E的祖先,J和Q是E的子孙。
12. 森林:由多棵互不相交的树的集合称为森林;
13. 任何一颗非空二叉树,度为0的节点永远比度为2的节点多一个。
1.2 树的表示
树有很多种表示方式如:双亲表示法,孩子表示法、孩子双亲表示法,孩子兄弟表示法等。下面介绍孩子兄弟表示法。
typedef int DataType; struct Node { struct Node* _firstChild1; // 第一个孩子结点 struct Node* _pNextBrother; // 指向其下一个兄弟结点 DataType _data; // 结点中的数据域 };