一、树、森林与二叉树的转换
1、树转二叉树:
(1)“孩子兄弟表示法”:左孩子右兄弟。
2、二叉树转森林:
(1)将根及左子树视为第一棵树,右链断开;
(2)剩下来的二叉树按同样方法;
(3)直到最后只剩一棵没有右子树的二叉树为止。
二、树和森林的遍历
相当于转换为二叉树后再遍历。
1、树先序:
(1)访问根结点;
(2)依次遍历根结点的每棵子树(先根后子树)。
2、树后序(相当于转化为二叉树后的中序遍历):
(1)依次遍历根结点的每棵子树;
(2)访问根节点。
3、森林先序(递归定义):
(1)访问第一棵树的根;
(2)先序遍历第一棵树根的子树森林;
(3)同样方法遍历剩下的森林。
4、森林中序(递归定义):
(1)中序遍历第一棵树根的子树森林;
(2) 访问第一棵树根;
(3)同样方法遍历剩下的森林。
5、二叉树遍历的对应:
树 | 森林 | 二叉树 |
先序 | 先序 | 先序 |
后序 | 中序 | 中序 |
一些结论:
(1)森林转二叉树后,由二叉树判断树的个数:只要数右上方的结点数;
(2)一棵树也可叫森林;
(3)森林有n个非叶结点,转换为二叉树后会出现n个叶子(每个非叶所在子树转换后都
会有一个叶子),加上在最后一棵树的根结点,共有n+1个无右子树的结点;
(4)森林叶子个数等于转为二叉树后无左孩子的结点个数;
(5)森林树的个数等于结点数减边数(连通分支数)。