目录
树的存储结构
1.双亲表示法(结构体数组)
结点表示:
优点:求结点的双亲十分方便,容易求树的根
缺点:求结点孩子的时候需要遍历整个结构
2.孩子表示法
有孩子链表和带双亲的孩子链表两种表示法
优点:找孩子、双亲都容易
缺点:存储空间增大
3.孩子兄弟法
typedef struct CSNode
{
ElemType data;
struct CSNode *firstchild,*nextsibling; //分别为第一个孩子结点和下一个兄弟结点
}CSNode,*CSTree;
森林与二叉树的转换
(孩子往左,兄弟往右)
1.树-->二叉树
1)加线:兄弟
2)去线:除了长子以外的线
例子:
2.二叉-->树
1)加线:某点双亲与此右子孙相连
2)去线:某点和其右子孙(去掉所有的子孙线)
例子:
3.森林-->二叉树
以第一棵树的根作为转换后的二叉树的根;
森林中的每一棵树都可以转换成二叉树
例子:
4.二叉树-->森林
同理
树和森林的遍历
和二叉树差不多
森林的先序遍历和转换后的二叉树的先序遍历序列一样。
森林的中序遍历和转换后的二叉树的中序遍历序列一样。