线索二叉树的建立与遍历

欢迎加qq群:453398542 学习讨论,会定期分享资料课程,解答问题。

线索二叉树的建立与遍历

#include<stdio.h>

#include<stdlib.h>

typedef enum PointerTag{Link, Thread};

typedef struct BiThrNode{

char data;

struct BiThrNode *lchild, *rchild;

PointerTag Ltag, Rtag;

}BiThrNode, *BiThrTree;

BiThrTree pre; //全局变量 

void InThreading(BiThrTree p){

//线索化函数

if(p){

InThreading(p->lchild);

if(!p->lchild){

p->Ltag=Thread; p->lchild=pre;

}

if(!pre->rchild){

pre->Rtag=Thread; pre->rchild=p;

}

pre=p;

InThreading(p->rchild);

}

void BiTree_Thread(BiThrTree bt,BiThrTree &Thrt){

//中序线索化

Thrt=(BiThrTree)malloc(sizeof(BiThrNode));

Thrt->Ltag=Link; Thrt->Rtag=Thread;

Thrt->rchild=Thrt;

if(!bt){

Thrt->Ltag=Thread; Thrt->lchild=Thrt;

else{

Thrt->lchild=bt; pre=Thrt;

InThreading(bt);

pre->Rtag=Thread; pre->rchild=Thrt;

Thrt->rchild=pre;

}

}

void visit(char ch){

printf("%3c",ch);

void InOrderTravrese_Thrt(BiThrTree Thrt){

//中序遍历

BiThrTree p;

p=Thrt->lchild;

while(p!=Thrt){

while(p->Ltag==Link){

p=p->lchild;

}

visit(p->data);

while(p->Rtag==Thread&&p->rchild!=Thrt){

p=p->rchild;

visit(p->data);

}

p=p->rchild;

}

}

void CreatBiTree(BiThrTree &bt){

//构造二叉树

char ch;

ch=getchar();

if(ch=='#')

bt=NULL;

else{

bt=(BiThrTree)malloc(sizeof(BiThrNode));

bt->data=ch;

CreatBiTree(bt->lchild);

CreatBiTree(bt->rchild);

int main(){

BiThrTree bt;

BiThrTree Thrt;

printf("输入数据:\n");

CreatBiTree(bt);

BiTree_Thread(bt,Thrt);

InOrderTravrese_Thrt(Thrt);

return 0;

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值