앞 순서 시퀀스 + 중간 순서 시퀀스 또는 중간 순서 시퀀스 + 후 순서 시퀀스 에 따라 이 진 트 리 를 복원 합 니 다.
6332 단어 데이터 구조나무.대학원 진학 - 데이터 구조
존재 pre[l1...r1]
중
존재 in[l2...r2]
에서 이 진 트 리 의 결점 데이터 영역 이 다 르 고 이 진 트 리 를 구성 하 며 구 해 야 한다
존재 in[l2...r2]
중
존재 post[l1...r1]
, 이 진 트 리 의 결점 데이터 영역 이 다 르 고 이 진 트 리 를 구성 하 며 그
#include
#include
typedef struct BTNode{//
char data;
struct BTNode *lchild,*rchild;
}BTNod;
BTNode *createBT(char pre[],int l1,int r1,char in[],int l2,int r2){// +
BTNode *s;//
int i;
if(l1>r1){
return NULL;
}else{
s=(BTNode *)malloc(sizeof(BTNode));//
s->lchild=NULL;//
s->rchild=NULL;
for(i=l2;i<=r2;i++){
if(in[i]==pre[l1]){//
break;
}
}
s->data=in[i];//
s->lchild=createBT(pre,l1+1,l1-l2+i,in,l2,i-1);// ,
s->rchild=createBT(pre,l1-l2+i+1,r1,in,i+1,r2);//
}
}
BTNode *createBT2(char post[],int l1,int r1,char in[],int l2,int r2){// +
BTNode *s;//
int i;
if(l1>r1){
return NULL;
}else{
s=(BTNode *)malloc(sizeof(BTNode));
s->lchild=NULL;
s->rchild=NULL;
for(i=l2;i<=r2;i++){
if(in[i]==post[r1]){//
break;
}
}
s->data=in[i];
s->lchild=createBT2(post,l1,l1-l2+i-1,in,l2,i-1);// ,
s->rchild=createBT2(post,l1-l2+i,r1-1,in,i+1,r2);//
}
}
void preOrder(BTNode *p){//
if(p!=NULL){
printf("%c ",p->data);
preOrder(p->lchild);
preOrder(p->rchild);
}
}
void postOrder(BTNode *p){//
if(p!=NULL){
postOrder(p->lchild);
postOrder(p->rchild);
printf("%c ",p->data);
}
}
int main(int argc, char** argv) {
BTNode *p;
char pre[]={'a','b','d','c'};//
char in[]={'b','d','a','c'};//
char post[]={'d','b','c','a'};//
int l1,r1,l2,r2;
l1=l2=0;
r1=r2=3;
printf(" + : ") ;
p=createBT(pre,l1,r1,in,l2,r2);
postOrder(p);
printf("
");
printf(" + : ") ;
p=createBT2(post,l1,r1,in,l2,r2);
preOrder(p);
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에 따라 라이센스가 부여됩니다.