树的定义
树是由n个结点组成的有限集合,如果n=0,它是一棵空树,如果n>0,这n个结点中有且只有一个结点作为树的根节点,其余结点分为m个互不相交的有点集,每个子集本身也是一颗符合定义的树,称为根节点的子树。简而言之,树是由规模更小的树组成的,用于表示层次关系的数据。
树的基本术语
1. 结点的度和树的度
树中某个结点的子树的个数称为该结点的度,树中所有结点的度中的最大值称为树的度,通常度为m的树称为m次树
2. 分支结点和叶子结点
树中度不为0的结点叫做分支结点,分支结点又包括单分支和双分支结点,度为0的叫做叶子结点。
3. 路径与路径长度
路径就是从树中的某一点从上至下的到达某一点的路径,其中路径长度为该路径经过的结点数-1.
4. 孩子结点,双亲结点,兄弟结点
可以衍生为子孙结点和祖先结点。
5. 结点层次和树的高度
根结点的层次为第一层,树中结点最大层次称为树的高度或者树的深度。
6. 有序树和无序树
无需深究
7. 森林
n个互不相交的树的集合称为森林,把含有多颗子树的树的根结点删去就变为了森林。
树的性质
性质一:树中结点数等于所有结点的度数之和加一
性质二:度为m的树中第i层最多有m^(i-1)个结点(i>=1)
树的遍历分为先序遍历,后序遍历,层次遍历,先序遍历后序遍历的过程都是递归的。
二叉树的概念与性质
二叉树是一个有限的结点集合,或有或空,或者由一个根节点和两棵互不相交的称为左子树和右子树的二叉树组成。
二叉树和度为2的树是不同的,差别为:
- 度为2的树中至少有一个结点的度为2,二叉树没有这样的要求。
- 度为2的树不区分左右子树,二叉树是区分的。
满二叉树
叶子结点都在最下一层
- 只有度为0和度为2的结点
完全二叉树
叶子结点只可能在最下面两层中出现
- 对于最大层次中的叶子结点,都依次排在最左边
- 如果有度1的结点,只可能有一个,且只有左孩子无右孩子
- 按照层序编号时,一旦出现编号为i的结点是叶子结点或者只有左孩子,则大于编号i的结点均为叶子结点
- 当结点总数n为奇数时,n1=0,为偶数时,n1=1。
二叉树的存储结构
二叉树的顺序存储
使用数组实现
- 对于一个编号为i的结点,如果有双亲,其双亲结点的编号为i/2,如果有左孩子,那么左孩子的下标是2i,如果它有右孩子,编号下标是2i+1.
二叉树的链式存储结构
二叉树的链式存储结构是指用一个链表来存储一棵二叉树,二叉树的每一个结点用链表中的一个结点来存储。