단서 이 진 트 리 - 데이터 구조
2528 단어 데이터 구조
단서 화 는 이 진 트 리 가 많이 나 오 는 n + 1 개의 체인 도 메 인 을 가리 키 는 전구 와 후계 용 으로 사용 하 는 것 입 니 다. 전구 후계 란 이 진 트 리 가 발생 하 는 전구 와 후계 를 중간 순서에 따라 옮 겨 다 니 는 것 을 말 합 니 다.
왼쪽 아이 왼쪽 아이 없 이 앞잡이
rtag = 0 오른쪽 아이 rtag = 1 오른쪽 아이 없 이 후계
예 코드: 구조 이 진 트 리 ABC \ # \ # DE \ # \ # \ # FG \ # \ # \ #
#include
#include
#include
typedef char Elemtype;
typedef enum PonintTag{Link,Tread};//Link==0, ,Tread==1,
//enum http://blog.sina.com.cn/s/blog_817a5eb6010146ad.html enum
typedef struct TNode
{
struct TNode *lchild,*rchild;
Elemtype data;
PonintTag ltag,rtag;
}TNode,*BinTree;
BinTree pre; //
//////////////////////////// ABC##DE###FG###
void CreatTree(BinTree &T)
{
Elemtype ch;
scanf("%c",&ch);
if(ch=='#') T=NULL;
else
{
T=(TNode*)malloc(sizeof(TNode));
T->data=ch;
CreatTree(T->lchild);
CreatTree(T->rchild);
}
}
void PreOrdTree(BinTree T)
{
BinTree p;
p=T;
if(p)
{
printf("%c",p->data);
PreOrdTree(p->lchild);
PreOrdTree(p->rchild);
}
}
void InTreading(BinTree P) //
{
if(P)
{
InTreading(P->lchild);//
if(!P->lchild) // ,
{
P->ltag=Tread; //
P->lchild=pre; //
}
if(!pre->rchild) //
{
pre->rtag=Tread;
pre->rchild=P;
}
pre=P; // pre
InTreading(P->rchild); //
}
}
void InOrdTreading(BinTree &Thrt,BinTree T)
{
Thrt=(TNode*)malloc(sizeof(TNode));
Thrt->ltag=Link,Thrt->rtag=Tread; // Thrt
Thrt->rchild=Thrt; //
if(!T) Thrt->lchild=Thrt; // ,
else
{
Thrt->lchild=T; //
pre=Thrt;
InTreading(T); //
pre->rchild=Thrt;//
pre->rtag=Tread;
Thrt->rchild=pre;
}
}
void InOrdTrevalThrd(BinTree T)
{
BinTree p;
p=T->lchild;
while(p!=T)
{
while(p->ltag==Link) p=p->lchild;
printf("%d %c %d
",p->ltag,p->data,p->rtag);
while(p->rtag==Tread && p->rchild!=T)
{
p=p->rchild;
printf("%d %c %d
",p->ltag,p->data,p->rtag);
}
p=p->rchild;
}
//printf("
");
}
int main()
{
BinTree Tree,Th;
CreatTree(Tree);
PreOrdTree(Tree); // ,
printf("
");
InOrdTreading(Th,Tree);
InOrdTrevalThrd(Th);
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
정수 반전Udemy 에서 공부 한 것을 중얼거린다 Chapter3【Integer Reversal】 (예) 문자열로 숫자를 반전 (toString, split, reverse, join) 인수의 수치 (n)가 0보다 위 또는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.