#include<stdio.h>
#include<stdlib.h>
typedef struct node
{
char data;
int ltag, rtag;
struct node* lchild;
struct node* rchild;
}TBTree;
TBTree* pre;
void Thread(TBTree* p)//对二叉树进行中序线索化
{
if (p!=NULL)
{
Thread(p->lchild);
if (p->lchild == NULL)
{
p->lchild = pre;
p->ltag = 1;
}
else
{
p->ltag = 0;
}
if (pre->rchild==NULL)
{
pre->rchild = p;
pre->rtag = 1;
}
else
{
pre->rtag = 0;
}
pre = p;
Thread(p->rchild);
}
}
TBTree* CreatThread(TBTree* b)//建立中序线索二叉树
{
TBTree* root;
root = (TBTree*)malloc(sizeof(TBTree));
root->ltag = 0;
root->rtag = 1;
if (b==NULL)
{
root->lchild = root;
}
else
{
root->lchild = b;
pre = root;
Thread(b);
pre->rchild = root;
pre->rtag = 1;
root->rchild = pre;
}
return root;
}
void Inorder(TBTree* b)//中序遍历中序线索二叉树
{
TBTree* p;
p = b->lchild;//p指向根节点
while (p!=b)
{
while (p->ltag=0)
{
p = p->lchild;
}
printf("%2c", p->data);
while (p->rtag==1&&p->rchild!=b)
{
p = p->rchild;
printf("%2c", p->data);
}
p = p->rchild;
}
}
void Create(TBTree** p)
{
char ch;
scanf_s("%c", &ch);
if (ch != '.')
{
*p = (TBTree*)malloc(sizeof(TBTree));
(*p)->data = ch;
Create(&(*p)->lchild);
Create(&(*p)->rchild);
}
else
{
*p = NULL;
}
}
void main(void)
{
TBTree* root, * p;
Create(&root);
p = CreatThread(root);
Inorder(p);
}
中序线索化二叉树
最新推荐文章于 2023-01-26 16:51:40 发布