두 갈래 나무가 두루 다니다(중서+선서,중서+후서)
후순과 중순을 알면 중순을 구할 수 있고,
하지만 중서를 알아야 다른 걸 구할 수 있어요.
세 가지 역력의 특징: 이 세 가지 역력의 특징은 먼저 서열이 뿌리 노드를 먼저 역력하는 것이다. 그래서 그의 서열의 첫 번째는 전체 두 갈래 나무의 뿌리 노드이다. 반대로 뒷 서열이 역력하는 서열의 마지막 하나는 두 갈래 나무의 뿌리 노드이다. 두 갈래 나무의 뿌리 노드를 단점을 통해 중서 서열에서 이 뿌리 노드를 찾아낸다. 왜냐하면 중서 서열은 왼쪽 글자를 먼저 역력한 다음에 뿌리 노드를 역력하고 그 다음은 오른쪽 서브 나무이기 때문이다.그래서 중서 서열 중의 뿌리 노드 왼쪽의 노드는 모두 왼쪽 나무이고 오른쪽의 서열은 모두 오른쪽 나무이어야 한다. 이어서 귀속적인 응용을 하면 전체 두 갈래 나무를 얻을 수 있다.
#include
#include
#include
#include
typedef struct node
{
char data;
struct node *lchild;
struct node *rchild;
}BiNode,*BTree;
void getpre(char *last,char *mid,BTree &T,int len)
{
if(len==0)
{
T=NULL;
return;
}
char ch=last[len-1];
int index=0;
while(mid[index]!=ch)
{
index++;
}
T=(BTree)malloc(sizeof(BiNode));
T->data=mid[index];
getpre(last,mid,T->lchild,index);
getpre(last+index,mid+index+1,T->rchild,len-index-1);
}
//void getpost(char *prim,char *mid,BTree &T,int len)
//{
// if(len==0)
// {
// T=NULL;
// return;
// }
// char ch=prim[0];
// int index=0;
// while(mid[index]!=ch)
// {
// index++;
// }
// T=(BTree)malloc(sizeof(BiNode));
// T->data=mid[index];
// getpost(prim+1,mid,T->lchild,index);
// getpost(prim+1+index,mid+index+1,T->rchild,len-1-index);
//}
void pre(BTree T)
{
if(T!=NULL)
{ printf("%c",T->data);
pre(T->lchild);
pre(T->rchild);
}
}
//void post(BTree T)
//{
// if(T!=NULL)
// {
// post(T->lchild);
// post(T->rchild);
// printf("%c",T->data);
// }
//}
int main()
{
char first[36];
char mid[36];
char last[36];
while(scanf("%s%s",last,mid)!=EOF)
{
BTree T=NULL;
getpre(last,mid,T,strlen(last));
pre(T);
printf("
");
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.