您的位置:逆风者 数据结构 正文
原作者:www.upwinder.com 添加时间:2007-09-02 原文发表:2007-08-31 人气:78 来源:未知

#include <stdio.h>
#include <malloc.h>
#include<stdlib.h>
typedef char DataType;/*定义DataType类型*/
typedef enum {Link,Thread}PointerTag;
typedef struct node{
DataType data;
逆风编程技术
struct node *lchild, *rchild;/*左右孩子子树*/
PointerTag LTag,RTag;
}BiThrNode;/*结点类型*/
typedef BiThrNode *BiThrTree ;/*二叉树类型*/
void CreatBinTree(BiThrTree *T)
{/*构造二叉链表,注意:输入序列是先序序列*/
char ch;
if ((ch=getchar())==' ')
*T=NULL;
else{/*读入非空格*/
*T=(BiThrNode *)malloc(sizeof(BiThrNode));/*生成结点*/
(*T)->data=ch;(*T)->LTag=Link;(*T)->RTag=Link;
CreatBinTree(&(*T)->lchild);/*构造左子树 */
CreatBinTree(&(*T)->rchild);/*构造右子树*/
}
}
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;/*保持pre指向p*/
InThreading(p->rchild);/*右子树线索化*/
}
}
int InOrderThreading(BiThrTree *Thrt,BiThrTree T)
/*中序遍厉二叉树T,并将其中序线索化,Thrt指向头结点*/
{ if(!(*Thrt=(BiThrTree)malloc(sizeof(BiThrNode)))) exit(0);
(*Thrt)->LTag=Link;(*Thrt)->RTag=Thread;/*建头结点*/
(*Thrt)->rchild=*Thrt;/*右指针回指*/
if(!T) (*Thrt)->lchild=*Thrt;
else
{ (*Thrt)->lchild=T;pre=*Thrt;
InThreading(T);/*中序遍历进行中序线索化*/
pre->rchild=*Thrt;pre->RTag=Thread;/*最后一个结点线索化*/
(*Thrt)->rchild=pre;
}
return 1;
}
int print(BiThrTree e)
{printf("%d %c %d\n",e->LTag,e->data,e->RTag);return 1;}

int InOrderTraverse(BiThrTree T,int (* visit)(BiThrTree e))
/*T指向头结点,头结点的左链lchild指向根结点,中序遍厉二叉树*/
{BiThrTree p;
p=T->lchild;/*p指向根结点*/
while(p!=T)/*空树或遍厉结束时,p==T*/
{while(p->LTag==Link) p=p->lchild;
if(!visit(p)) return 0;/*打印*/
while(p->RTag==Thread&&p->rchild!=T)
{p=p->rchild;visit(p);}/*访问后继结点*/
p=p->rchild;
}
return 1;
}
void main()
{/*测试程序*/
BiThrTree T,Thrt;
CreatBinTree(&T);
InOrderThreading(&Thrt,T);
InOrderTraverse(Thrt,print);
}
/*可输入"- a *b -c d /e f "来测试(注意空格)*/

相关文章

数据结构--序言
数据结构教程 第十课 栈的表示与实现
数据结构教程 第二十六课 图的定义与术语
排序及查找方法
数据结构教程 第十六课 串操作应用举例
数据结构教程 第三十二课 哈希表(一)
数据结构教程 第三十一课 动态查找表
数据结构教程 第二十四课 遍历二叉树
数据结构教程 第六课 线性表的顺序表示和实
数据结构教程 第二十二课 实验五 数组实验
数据结构教程 第三十六课 选择排序,归并排
数据结构教程 第二十课 广义表
关于文件管理系统的数据结构模拟
链表基本操作的程序实现
用栈设置密码
数据结构教程 第三十课 静态查找表(二)有
有向图转换
JAVA编写的拼图游戏移动算法,简单易懂
数据结构教程 第四十课 总复习
无向图转换

相关评论


本文章所属分类:首页 数据结构

  热门关键字: