本文内容:树的存储结构、树与二叉树的相互转换、树与森林的遍历
一、树的存储结构
1、双亲表示法
特点: 方便找parent,但是不方便找子节点
2、孩子表示法
特点:每个节点的孩子节点都可以轻松找到。如下图,采用邻接链表来实现了。
3、孩子兄弟表示法
结构:
示例:
总结
二、树、森林与二叉树的相互转换
1、树与二叉树转换
上面这个树转换为二叉树:
即将节点的左指针指向第一个孩子,右指针指向下一个兄弟节点,
2、森林转二叉树
给一个森林
先把森林里的每一颗树转成二叉树
我们把森林中每一棵树的根节点彼此视为兄弟节点
再调整一下:
二叉树转森林就是上述过程的逆过程
总之,森林转二叉树,就是先把里面的每一颗树转二叉树,然后将彼此的根节点视为兄弟节点,串起来即可。
二、树和森林的遍历
1、树的遍历
只有三种:
先序遍历,不解释:
后序遍历:
为什么树的后根遍历序列和它转二叉树之后的中序遍历序列一样呢?
这里稍微做一下解释。
我们以图中的A节点为例子
在左边的树中:后跟遍历是先访问子节点D、E,然后访问A本身,最后再访问它的下一个兄弟节点B;
而在右边,它对应的二叉树中,中序遍历是先访问A的左子树D、E;然后访问A本身,最后访问A的右孩子B。
因此,我们可以判断,树的后序遍历与它二叉树的中序遍历一样
2、森林的遍历
举例子,先序遍历:
中序遍历:
注意,森林的中序遍历是:森林中的每一棵树后根遍历组成的序列。
总结:
树具有后序遍历,森林具有中序遍历,别记混了。