두 갈래 트리 기본 조작, 비귀속 중순, 후순 두 갈래 트리 두루 훑어보기
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define STACK_INIT_SIZE 50
typedef struct BiTree{
int data;
int flag;
struct BiTree *lchild,*rchild;
}BiTNode;
typedef struct Stack{
BiTNode **base;
BiTNode **top;
int stacksize;
}SqStack;
int InitStack(SqStack *s)
{
s->base =(BiTNode **)malloc(STACK_INIT_SIZE*sizeof(BiTNode*));
s->top =s->base ;
s->stacksize =STACK_INIT_SIZE;
return 0;
}
int IsEmpty(SqStack *s)
{
if(s->base ==s->top )
return 1;
return 0;
}
int Push(SqStack *s,BiTNode *T)
{
*(s->top)=T;
s->top ++;
return 0;
}
BiTNode *Pop(SqStack *s)
{
if(s->base ==s->top )
exit(0);
s->top--;
return *(s->top);
}
BiTNode *PreOrderCreate(BiTNode *T)//
{
int datum;
scanf("%d",&datum);
if(datum==0)
{
T=NULL;
return T;
}
T=(BiTNode *)malloc(sizeof(BiTNode));
if(!T)
exit(0);
T->data =datum;
T->lchild =PreOrderCreate(T->lchild);
T->rchild =PreOrderCreate(T->rchild);
return T;
}
void PreOrderPrint(BiTNode *T)//
{
if(T!=NULL)
{
printf("%d ",T->data );
PreOrderPrint(T->lchild );
PreOrderPrint(T->rchild );
}
}
void InOrderPrint(BiTNode *T)//
{
BiTNode *t=T;
SqStack *s=(SqStack *)malloc(sizeof(SqStack));
InitStack(s);
while(t||!IsEmpty(s))
{
while(t)
{
Push(s,t);
t=t->lchild ;
}
if(!IsEmpty(s))
{
t=Pop(s);
printf("%d ",t->data );
t=t->rchild ;
}
}
}
void PostOrderPrint(BiTNode *T)//
{
BiTNode *t=T;
SqStack *s=(SqStack *)malloc(sizeof(SqStack));
InitStack(s);
while(t||!IsEmpty(s))
{
if(t)
{
t->flag =1;
Push(s,t);
t=t->lchild ;
}
else
{
t=Pop(s);
if(t->flag ==1)
{
t->flag =2;
Push(s,t);
t=t->rchild ;
}
else
{
printf("%d ",t->data );
t=NULL;
}
}
}
}
int main(int argc,char *argv[])
{
BiTNode *T;
T=PreOrderCreate(T);
PreOrderPrint(T);
printf("
");
InOrderPrint(T);
printf("
");
PostOrderPrint(T);
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
java 백엔드에서 데이터를 트리로 변환하고 맵은 json 트리를 생성하여 백엔드로 되돌려줍니다. (백엔드 변환)java 백엔드, 데이터를 트리로 변환하고,map는 json 트리를 생성하여 전방으로 되돌려줍니다(백엔드 변환) 1. 왜 이런 블로그를 쓰나요? 2.java 백엔드 코드 3. 전환된 데이터는 다음과 유사한 형식으로 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.