先序建立一颗二叉树,并且中序线索化,然后中序线索遍历它 7078

#include <iostream>
#include<bits/stdc++.h>
using namespace std;
typedef struct node{
char data;
int ltag,rtag;
struct node *lchild,*rchild;
}treeno,*treenode;

treenode p;

void cre(treenode &root){
char x;
cin>>x;
if(x=='@') root=NULL;
else{
    root=new treeno;
    root->data=x;
    root->ltag=0;
    root->rtag=0;
    cre(root->lchild);
    cre(root->rchild);
}
}
void t(treenode root){
if(root){
    t(root->lchild);
if(root->lchild==NULL){
   root->lchild=p;
   root->ltag=1;
}
if(p->rchild==NULL){
    p->rtag=1;
    p->rchild=root;
}
p=root;
t(root->rchild);

}

}

treenode f(treenode root){

treenode head=new treeno;
head->lchild=root;
head->rchild=head;
head->ltag=0;
head->rtag=1;
p=head;

t(root);

head->rchild=p;
p->rchild=head;

return head;

}

void visit(treenode head){
    treenode p;
    p=head->lchild;

  while(p!=head){

    while(p->ltag==0) {

    p=p->lchild;
}
cout<<p->data;

while(p->rtag==1){
    p=p->rchild;
   cout<<p->data;
}
p=p->rchild;

  }

}

int main()
{
    treenode root,head;
    cre(root);
   head=f(root);
    visit(head);

    //ABD@@E@@CF@@G@@
    return 0;
}
 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值