/树的孩子兄弟表示法(树的二叉树表示法,二叉链表)
Typedef struct CSNode{
int data;
struct CSNode *firstChild;//指向第一个孩子
struct CSNode *nextSibling;//指向第一个兄弟
}CSNode,*CSNode;
//用孩子兄弟表示法最大优点是可以方便地实现树转换为二叉树
//缺点是从当前节点查找其双亲节点麻烦
//规则:左指孩子,右指兄弟
B_TNode* swap(CSTNode,*p)
{
B_TNode *bt = NULL;
if(p)
{
bt = (B_TNode*)malloc(sizeof(B_TNode));
bt->data = p->data;
bt->lchild = swap(p->firstChild);
bt->rchild = swap(p->nextSibling);
}
return bt;
}
基础知识:
树的先序是二叉树的先序
树的后序是二叉树的中序
树转换为二叉树:(2017年)
1.兄弟相连 2.除长子外去线 3.旋转
(由兄弟转换来的做右节点)
二叉树转换为树:
1.加线(若左孩子存在,将这个左孩子的有孩子和其右孩子的右孩子连起来)
2.去线:去掉原来所有与右孩子的连线
3.旋转
森林转换成二叉树:
1.将森林中所有的树转换为二叉树
2.将将第二棵树的根作为第一颗树的右孩子,将第三棵树的根作为第二棵树的右孩子
(因为由树转来的二叉树都没有右孩子嘛)
二叉树转化为森林:
1.若有右孩子,去右孩子线
2.将分离后的二叉树转换成树