二叉树的(先,中,后)序建树,线索化及遍历(二)

二叉树的(先,中,后)序的建树

核心递归访问顺序
(1):访问顺序
访问顺序
(2):反复递归调用

先序建树:按照反访问顺序

先序访问顺序
先序建树

//先序创建树
Status CreatPreBiThreadTree(BiThrTree &T, char TreeArray[])
{
    char ch = TreeArray[N];
        N++;
    if ('$' == ch) {
        T = NULL;
        return 0;
    }
    else{
        if (!(T = (BiThrNode *)malloc(sizeof(BiThrNode))))
            return OVERFLOW;
        T->data = ch;
        printf("%5c", T->data);
        T->LTag = Link;
        CreatPreBiThreadTree(T->lchild, TreeArray);
        T->RTag = Link;
        CreatPreBiThreadTree(T->rchild, TreeArray);
    }
    return OK;
}
中序建树:按照反访问顺序

中序访问顺序
中序建树

//中序创建树
Status CreatInBiThreadTree(BiThrTree &T, char TreeArray[])
{

    char ch = TreeArray[N2];
        N2++;
    if ('$' == ch) {
        T = NULL;
        return 0;
    }
    else {
        if (!(T = (BiThrTree)malloc(sizeof(BiThrNode))))
            return OVERFLOW;
        T->LTag = Link;
        CreatInBiThreadTree(T->lchild, TreeArray);
        T->data = ch;
        printf("%5c", T->data);
        T->RTag = Link;
        CreatInBiThreadTree(T->rchild, TreeArray);
    }
    return OK;
}
后序建树:按照反访问顺序,后序遍历需要知道双亲节点,所以要用带双亲节点的三叉料表

后序访问顺序
后续建树

//后序创建树
Status CreatPostBiThreadTree(BiThrTree &T, char TreeArray[], BiThrTree &parent)
{
    char ch = TreeArray[N3];
        N3++;
    if ('$' == ch) {
        T = NULL;
        return 0;
    }
    else {
        if (!(T = (BiThrNode *)malloc(sizeof(BiThrNode))))
            return OVERFLOW;
        T->Parent = parent;
        T->LTag = Link;
        CreatPostBiThreadTree(T->lchild, TreeArray, T);
        T->RTag = Link;
        CreatPostBiThreadTree(T->rchild, TreeArray, T);
        T->data = ch;
        printf("%5c", T->data);
    }
    return OK;
}

注意:接下来的两篇文章重点就是二叉数的三种线索化和对应的遍历,由于篇幅的问题及处理方式的不同,分成了两章内容
1:(先序,中序)线索化及遍历,这两个相识度很高,所以放在了一起。
2: 后序线索化及遍历,要使用带双亲的三叉链表,单独写。

(先序,中序)线索化及遍历:

https://blog.csdn.net/weixin_39956356/article/details/80142461

后序线索化及遍历:

https://blog.csdn.net/weixin_39956356/article/details/80144113

线索二叉树的基本知识:

https://blog.csdn.net/weixin_39956356/article/details/80141980

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值