데이터 구조 - 이 진 트 리 사례 분석
5506 단어 대학의 데이터 구조 축적이 진 트 리데이터 구조
#include
#include
#include
#include
#include
/* , */
#define MAX 100
typedef struct BNode/* */
{
int data;
struct BNode *l_child;
struct BNode* r_child;
} BNode;
int e,z,i,j,k;// 。
BNode *t,*q,*p;
typedef struct//
{
BNode *a[MAX];
int top;
}sqstack;
typedef struct// ,
{
BNode *a[MAX];
int front;
int rear;
}squeue;
// , x , , ,
BNode *Creat_One()// scanf
{
BNode *p;
int x;
scanf("%d",&x);
if((p=(BNode*)malloc(sizeof(BNode)))==NULL)// p , ,
{
printf(" .
");
return NULL;
}
else
{
p->data=x;
p->l_child=NULL;
p->r_child=NULL;
}
return p;//p , 。
}
void push(sqstack *s,BNode *x)// , +1
{
if(s->top==MAX)
{
printf(" .
");
}
else
{
s->top++;
s->a[s->top]=x;// x
}
}
BNode * pop(sqstack *s)// ,
{
BNode *x;
if(s->top==0)
{
printf(" .
");
}
else
{
x=s->a[s->top];
s->top--;
}
return x;//
}
/* */// 。
void enqueue(squeue *Q,BNode *x)// x
{
if((Q->rear+1)%MAX==Q->front)// ,
{
printf(" ");
}
else
{
Q->a[Q->rear]=x; Q->rear=(Q->rear+1)%MAX;
}
}
BNode *delqueue(squeue*Q)
{ BNode *x;
if(Q->rear==Q->front)
{
printf(" .
");
}
else
{
x=Q->a[Q->front];
Q->front=(Q->front+1)%MAX;// return x;
}
}/* */
BNode *Creat_Bt1()// Creat_One
{ // , , , 0
// 2^0+2^1+...2^n , 0 2^(n+1)
BNode *t; printf("
data=");
scanf("%d",&e); if(e==0) t=NULL;
else { t=(BNode*)malloc(sizeof(BNode));
t->data=e; t->l_child=Creat_Bt1();/* */
t->r_child=Creat_Bt1(); } return t;}/* */// ,
/* N , ,
1 i 1. i>1,
i /2 i=1 2. 2i<=n i 2i,
2*i n 3. 2*i+1<=n i 2*i+1, i */
BNode *Creat_Bt0()
{ BNode *t,*p,*v[20];
printf("
i data=?");
scanf("%d %d",&i,&e);
while(i!=0&&e!=0)
{
p=(BNode*)malloc(sizeof(BNode));
p->data=e; p->r_child=NULL;
p->l_child=NULL; v[i]=p;
if(i==1)
{
t=p;
}
else { j=i/2; if(i%2==0)
{
v[j]->l_child=p;
} else { v[j]->r_child=p; }
}
printf("
i data=?");
scanf("%d %d",&i,&e);
} return t;}
/* */
void preorder(BNode *p)
{ if(p)
{ printf("%3d",p->data);
preorder(p->l_child);
preorder(p->r_child);
}
}
/* , */
void inorder(BNode*p)
{ if(p)
{ inorder(p->l_child);
printf("%3d",p->data);
inorder(p->r_child);
}}
/* */
void inorder_2(BNode *t)
{ sqstack s; BNode *p;
s.top=0; push(&s,t);
while(s.top!=0)
{ while(s.a[s.top]!=NULL)
{
p=s.a[s.top];
push(&s,p->l_child);
} p=pop(&s); if(s.top!=0)
{ p=pop(&s);
printf("%3d",p->data);
push(&s,p->r_child);
}
}
}
void level(BNode *t)
{ squeue q; BNode *p;
q.front=0; q.rear=0;
enqueue(&q,t);
while(q.rear!=q.front)
{ p=delqueue(&q);
printf("%3d",p->data);
if(p->l_child)enqueue(&q,p->l_child);
if(p->r_child)enqueue(&q,p->r_child);
}
printf("
");}
int e,z,i,j,k;BNode *t,*q,*p;
void main()
{
do {
printf("
");
printf("
0. 0");
printf("
1. 1");
printf("
2. ");
printf("
3. ");
printf("
4. ");
printf("
5. ");
printf(" :
");
scanf("%d",&k);
switch(k)
{ case 0:
{
printf("
");
t=Creat_Bt0(); preorder(t);
break;
}
case 1:
{
printf(" , 0");
t=Creat_Bt1(); preorder(t); break;
}
case 2:
{ printf(" :
");
inorder(t);
break;
}
case 3:
{
printf(" :
");
inorder_2(t);
break;
}
case 4:
{ printf(" :
");
level(t); break; }
case 5:
exit(0);
}
}
while(k>=0&&k<=5); printf("
");
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
same-tree java제목 설명 Given two binary trees, write a function to check if they are equal or not. Two binary trees are considered equal ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.