森林、树与二叉树的转换

/树的孩子兄弟表示法(树的二叉树表示法,二叉链表)
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;
}
        

 

063415a1b7d6442e8bf694f39b04508a.png15d177bc7faa43909f036568fc03c3fa.png

cc1ba7ce30c042c8a1e4db3aef0f21b5.png

467a5d039fd6469ca27afe787fdde6c1.png

 

基础知识:

树的先序是二叉树的先序

树的后序是二叉树的中序

树转换为二叉树:(2017年)

1.兄弟相连 2.除长子外去线 3.旋转

(由兄弟转换来的做右节点)

二叉树转换为树:

1.加线(若左孩子存在,将这个左孩子的有孩子和其右孩子的右孩子连起来)

2.去线:去掉原来所有与右孩子的连线

3.旋转

森林转换成二叉树:

1.将森林中所有的树转换为二叉树

2.将将第二棵树的根作为第一颗树的右孩子,将第三棵树的根作为第二棵树的右孩子

(因为由树转来的二叉树都没有右孩子嘛)

二叉树转化为森林:

1.若有右孩子,去右孩子线

2.将分离后的二叉树转换成树

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值