#include <stdio.h>
#include <stdlib.h>
typedef struct TREE {
char data;
struct TREE* Lchild;
struct TREE* Rchild;
struct TREE* Parent;
int rtag;
int ltag;
}TREE,*PTREE;
void create(TREE** T,PTREE parent) {
char data;
scanf("%c", &data);
getchar();
if (data != '#') {
*T = (PTREE)malloc(sizeof(TREE));
(*T)->data = data;
(*T)->ltag = 0;
(*T)->rtag = 0;
(*T)->Parent = parent;
create(&(*T)->Lchild,*T);
create(&(*T)->Rchild,*T);
}
else
{
*T = NULL;
}
}
void postthread(PTREE T, TREE** pre) {
if (T) {
postthread(T->Lchild, pre);
postthread(T->Rchild, pre);
if (T->Lchild == NULL) {
T->ltag = 1;
T->Lchild = *pre;
}
if (*pre != NULL && (*pre)->Rchild == NULL) {
(*pre)->rtag = 1;
(*pre)->Rchild = T;
}
*pre = T;
}
}
PTREE GetFirst(PTREE T) {
while (T->ltag == 0) {
T = T->Lchild;
}
if (T->rtag == 0) {
return GetFirst(T->Rchild);
}
else
{
return T;
}
}
PTREE GetNext(PTREE node) {
if (node->rtag == 1) {
return node->Rchild;
}
else
{
if (node->Parent == NULL) {
return NULL;
}
else if (node->Parent->Rchild == node) {
return node->Parent;
}
else
{
if (node->Parent->rtag == 0) {
return GetFirst(node->Parent->Rchild);
}
else
{
return node->Parent;
}
}
}
}
int main() {
PTREE T;
create(&T,NULL);
PTREE pre = NULL;
postthread(T, &pre);
for (PTREE node = GetFirst(T); node != NULL; node = GetNext(node)) {
printf("%c", node->data);
}
return 0;
}
线索二叉树(后序)
最新推荐文章于 2024-11-03 00:42:08 发布