树
相较于前面讲过的线性表,树不具有线性表唯一前驱唯一后继的特点。树除了根节点以外,其他节点都只有一个直接前驱,若干个直接后继。
树的递归定义
树是一种递归定义的,每个树可以被视作根-子树的集合体。
注意,树之间不能带回路的
树的基本概念
- 节点的度
节点的度指的是指的是节点的子树
如上图用红色标明的根,他的度是2 - 叶子节点
度为0的节点 - 双亲节点与子节点
如果一个根节点度不为0,那么他的下一级子树的根节点被称为子节点,相对于子节点,他被称为根节点。 - 兄弟节点
具有相同双亲的子节点被称为兄弟节点。(亲兄弟) - 树的度
一颗树中,最大节点的度被称为树的度。
上图中树的度是3 - 节点的层次
从根节点开始,根节点是第一层,虽有依次递增 - 树的深度或高度
树的最大层次
空树的高度是0,一个节点都没有 - 森林
多颗不相交的树构成森林
树的数据结构
直接定义法(已知数的度)
已知数的度的话,可以用一个指针数组来存放他的子树的指针。
struct TreeNode
{
int data;
struct TreeNode* childs[6]; //已知树的度是6
};
也可以动态申请指针数组,但是c语言里面很不方便操作,malloc
孩子兄弟表示法
这是存储树最优