데이터 구조의 이 진 트 리 - 이 진 트 리 를 구 한 후 순차 적 으로 옮 겨 다 니 고 차원 적 으로 옮 겨 다 니 기 (먼저 나 무 를 만 들 고 다시 옮 겨 다 니 기)
4849 단어 데이터 구조
Time Limit: 1000MS Memory limit: 65536K
제목 설명
이 진 트 리 의 앞 순 서 를 알 고 있 습 니 다. 이 진 트 리 의 뒤 순 서 를 찾 습 니 다.
입력
입력 데 이 터 는 여러 그룹 이 있 고 첫 번 째 줄 은 정수 t (t < 1000) 이 며 t 조 테스트 데 이 터 를 대표 합 니 다.각 조 는 길이 가 50 보다 작은 문자열 두 개 를 포함 하고 첫 번 째 문자열 은 이 진 트 리 의 우선 순 서 를 나타 내 며 두 번 째 문자열 은 이 진 트 리 의 중간 순 서 를 나타 낸다.
출력
각 조 의 첫 번 째 줄 은 이 진 트 리 의 뒷 순 서 를 출력 하고 두 번 째 줄 은 이 진 트 리 의 차원 을 출력 합 니 다.
예제 입력
2
abdegcf
dbgeafc
xnliu
lnixu
예제 출력
dgebfca
abcdefg
linux
xnuli
: , 、 ! , !
:
#include <iostream>
#include <iomanip>
#include <string>
#include <string.h>
#include <stdio.h>
#include <algorithm>
#include <queue>
#include <vector>
using namespace std;
typedef struct node
{
char a;
struct node *ll;
struct node *rr;
}Binode, *tree;
void build(int len, char *s1, char *s2, char *s) //
{
if(len<=0)
return;
int pos; //
int i;
for(i=0; i<len; i++)
{
if(s2[i]==s1[0])
{
pos=i;
break;
}
}
build(pos, s1+1, s2, s );
build(len-pos-1, s1+pos+1, s2+pos+1, s+pos );
s[len-1]=s1[0];
}
//
struct node*creat(struct node *root, char *s, char *s1, int n)
{
if(n<=0)
return NULL;
root=new node;
root->a=s[0];
int p=strchr(s1, s[0] )-s1;
root->ll=creat( root->ll, s+1, s1, p );
root->rr=creat( root->rr, s+p+1, s1+p+1, n-p-1 );
return root;
}
//
void Level_Order(tree root)
{
queue<tree>q;
tree qq;
if(root==NULL)
return ;
Binode *p=root;
cout<<(p->a);
if(p->ll)
q.push( p->ll );
if(p->rr)
q.push( p->rr );
while(!q.empty())
{
qq=q.front();
q.pop();
cout<<qq->a;
if(qq->ll)
q.push(qq->ll);
if(qq->rr)
q.push(qq->rr);
}
return;
}
int main()
{
int t;
cin>>t;
char s1[100], s2[100];
char s3[100];
while(t--)
{
memset(s3, '\0', sizeof(s3));
scanf("%s", s1); //
scanf("%s", s2); //
int len=strlen(s1);
build(len, s1, s2, s3);
printf("%s
", s3); //
//
tree root, tt;
root=creat(tt, s1, s2, len);
Level_Order( root);
cout<<endl;
}
return 0;
}
: 、 ,
:
#include <iostream>
#include <iomanip>
#include <string>
#include <string.h>
#include <stdio.h>
#include <algorithm>
#include <queue>
#include <vector>
using namespace std;
typedef struct node
{
char a;
struct node *ll;
struct node *rr;
}Binode, *tree;
//
struct node*creat(struct node *root, char *s, char *s1, int n)
{
if(n<=0)
return NULL;
root=new node;
root->a=s[0];
int p=strchr(s1, s[0] )-s1;
root->ll=creat( root->ll, s+1, s1, p );
root->rr=creat( root->rr, s+p+1, s1+p+1, n-p-1 );
return root;
}
void postorder(tree p)
{
if(p)
{
postorder(p->ll);
postorder(p->rr);
printf("%c", p->a );
}
}
//
void Level_Order(tree root)
{
queue<tree>q;
tree qq;
if(root==NULL)
return ;
Binode *p=root;
cout<<(p->a);
if(p->ll)
q.push( p->ll );
if(p->rr)
q.push( p->rr );
while(!q.empty())
{
qq=q.front();
q.pop();
cout<<qq->a;
if(qq->ll)
q.push(qq->ll);
if(qq->rr)
q.push(qq->rr);
}
return;
}
int main()
{
int t;
cin>>t;
char s1[100], s2[100];
char s3[100];
while(t--)
{
memset(s3, '\0', sizeof(s3));
scanf("%s", s1); //
scanf("%s", s2); //
int len=strlen(s1);
//
tree root, tt;
root=creat(tt, s1, s2, len);
postorder(root);
cout<<endl;
Level_Order( root);
cout<<endl;
}
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에 따라 라이센스가 부여됩니다.