#include "stdio.h"
#define OK 1
#define LEN sizeof(struct BiTNode)
#define TRUE 1
#define FALSE 0
#define Link 0
#define Thread 1
struct BiTNode //定义一个二叉树结点
{
char data;
struct BiTNode *lchild,*rchild;
int LTag,RTag;
};
struct BiTNode *CreateTree(char [],int);
struct BiTNode *pre;
main()
{
struct BiTNode *root; //定义两个二叉树的根节点
int chi=1; //用作建立二叉树的游标
char ch1[10]="abcdefghi"; //定义两个二叉树
root=(struct BiTNode *)malloc(LEN);
root->lchild=CreateTree(ch1,chi);
}
struct BiTNode *CreateTree(char ch[],int chi) //按定义建立二叉树
{
if(chi>=10)
return NULL;
else
{
struct BiTNode *root;
root=(struct BiTNode *)malloc(LEN);
root->data=ch[chi-1];
root->LTag=root->RTag=0;
root->lchild=CreateTree(ch,chi*2);
root->rchild=CreateTree(ch,chi*2+1);
return root;
}
}
InOrderTraverse(struct BiTNode *root) //中序遍历二叉树
{
struct BiTNode *Thrt;
Thrt=(struct BiTNode *)malloc(LEN);
Thrt->LTag=Link;
Thrt->RTag=Thread;
Thrt->rchild=Thrt;
if(!root->lchild)
Thrt->lchild=Thrt;
else
{
Thrt->lchild=root->lchild;
pre=Thrt;
InThreading(root);
pre->rchild=Thrt;
pre->RTag=Thread;
Thrt->rchild=pre;
}
return OK;
}
InThreading(struct BiTNode *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);
}
}