您的位置:首页 > 编程语言 > C语言/C++

C++中序线索化二叉树

2015-05-05 21:12 141 查看
#include <iostream>
using namespace std;

typedef struct TBTNode
{
char data;
int ltag,rtag;
struct TBTNode * lchild;
struct TBTNode * rchild;
}TBTNode;

TBTNode * initTBTNode()
{
TBTNode * p=(TBTNode*)malloc(sizeof(TBTNode));
p->lchild=0;
p->rchild=0;
p->ltag=0;
p->rtag=0;
return p;
}

TBTNode * initTBTree(TBTNode * p)
{
TBTNode * A=initTBTNode();
TBTNode * B=initTBTNode();
TBTNode * C=initTBTNode();
TBTNode * D=initTBTNode();
TBTNode * E=initTBTNode();

A->data='A';
B->data='B';
C->data='C';
D->data='D';
E->data='E';

A->lchild=B;
A->rchild=C;
B->rchild=D;
C->lchild=E;

p=A;

return p;
}

void InThread(TBTNode *p,TBTNode *&pre)
{
if(p!=0)
{
InThread(p->lchild,pre);
if(p->lchild==0)
{
p->lchild=pre;
p->ltag=1;
}
if(pre!=0&&pre->rchild==0)
{
pre->rchild=p;
pre->rtag=1;
}
pre=p;
InThread(p->rchild,pre);
}
}

TBTNode * First(TBTNode * p)
{
while(p->ltag==0)
p=p->lchild;
return p;
}

TBTNode * Next(TBTNode * p)
{
if(p->rtag==0)
return First(p->rchild);
else
return p->rchild;
}

void Inorder(TBTNode * root)
{
for(TBTNode *p=First(root);p!=0;p=Next(p))
cout << p->data << " ";
cout << endl;
}

void createInThread(TBTNode * root)
{
TBTNode * pre =initTBTNode();
if(root!=0)
{
InThread(root,pre);
pre->rchild=0;
pre->rtag=1;
}
}

int main(int argc, char* argv[])
{
TBTNode *p=initTBTNode();
p=initTBTree(p);
TBTNode *pre=initTBTNode();
createInThread(p);
Inorder(p);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: