小白初学者的--------中序线索二叉树的的编码

 # include "iostream"
using namespace std;
typedef struct node{
    int data;
    struct node*lchild;
    struct node *rchild;
    int rtage;
    int ltage;
}node,*linklist;
linklist pre=NULL;

= 进行结构体的构造和全局变量变量的构造。

void zhongxu(linklist tt){
    if(tt!=NULL){
        zhongxu(tt->lchild);
        cout<<" "<<tt->data;
        zhongxu(tt->rchild);
    }
}

=进行中序遍历

void visit(linklist tt){
    if(tt->lchild==0){
        tt->lchild=pre;
        tt->ltage=1;
    }
    cout<<" "<<tt->data;
    if(pre!=NULL&&pre->rchild==NULL){
        pre->rchild=tt;
        pre->rtage=1;
    }
    pre=tt;
}
void ListNode(linklist tt){
    if(tt!=NULL){
        ListNode(tt->lchild);
        visit(tt);
        ListNode(tt->rchild);
        if(pre->rchild==NULL){
            pre->rchild=NULL;
            pre->rtage=1;
        }
    }
}

=进行中序线索化。

linklist FirstNode(linklist tt){
    while(tt->ltage==0){
        tt=tt->lchild;
    }
    return tt;
}
linklist KsNode(linklist tt){
    if(tt->rtage==0){
        return FirstNode(tt->rchild);
    }
    else{
        return tt->rchild;
    }
}
void KmNode(linklist tt){
    linklist qq=FirstNode(tt);
    while(qq!=NULL){
        cout<<" "<<qq->data;
        qq=KsNode(qq);
    }
}

=线索化的遍历

 # include "iostream"
using namespace std;
typedef struct node{
    int data;
    struct node*lchild;
    struct node *rchild;
    int rtage;
    int ltage;
}node,*linklist;
linklist pre=NULL;
void Node(linklist tt);

void zhongxu(linklist tt){
    if(tt!=NULL){
        zhongxu(tt->lchild);
        cout<<" "<<tt->data;
        zhongxu(tt->rchild);
    }
}
void visit(linklist tt){
    if(tt->lchild==0){
        tt->lchild=pre;
        tt->ltage=1;
    }
    cout<<" "<<tt->data;
    if(pre!=NULL&&pre->rchild==NULL){
        pre->rchild=tt;
        pre->rtage=1;
    }
    pre=tt;
}
void ListNode(linklist tt){
    if(tt!=NULL){
        ListNode(tt->lchild);
        visit(tt);
        ListNode(tt->rchild);
        if(pre->rchild==NULL){
            pre->rchild=NULL;
            pre->rtage=1;
        }
    }
}
linklist FirstNode(linklist tt){
    while(tt->ltage==0){
        tt=tt->lchild;
    }
    return tt;
}
linklist KsNode(linklist tt){
    if(tt->rtage==0){
        return FirstNode(tt->rchild);
    }
    else{
        return tt->rchild;
    }
}
void KmNode(linklist tt){
    linklist qq=FirstNode(tt);
    while(qq!=NULL){
        cout<<" "<<qq->data;
        qq=KsNode(qq);
    }
}
int main(){
    linklist tt;
    tt=(linklist)malloc(sizeof(node));
    tt->data=1;
    tt->rchild=tt->lchild=0;
    tt->ltage=tt->rtage=0;
     
    tt->lchild=(linklist)malloc(sizeof(node));
    tt->lchild->data=2;
    tt->lchild->lchild=tt->lchild->rchild=0;
    tt->lchild->ltage=tt->lchild->rtage=0;

    tt->rchild=(linklist)malloc(sizeof(node));
    tt->rchild->data=3;
    tt->rchild->rchild=tt->rchild->lchild=0;
    tt->rchild->ltage=tt->rchild->rtage=0;

    tt->lchild->lchild=(linklist)malloc(sizeof(node));
    tt->lchild->lchild->data=4;
    tt->lchild->lchild->lchild=tt->lchild->lchild->rchild=0;
    tt->lchild->lchild->ltage=tt->lchild->lchild->rtage=0;
    cout<<"普通的中序遍历"<<endl;
    zhongxu(tt);
    cout<<endl;
    cout<<"线索华中序二叉树"<<endl;
    ListNode(tt);
    cout<<endl;

    cout<<"线索化完成"<<endl;
    cout<<"线索化得遍历"<<endl;
    KmNode(tt);
     
    return 0;
}

=完整的代码

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值