계단식 두 갈래 나무 관련 문제

L2 006 나무의 두루 다니기
두 갈래 나무의 뒷차례와 중간차례를 정해 주십시오. 층차례가 흐르는 순서를 출력해 주십시오.여기서 키 값이 서로 같지 않은 정수라고 가정합니다.

형식 입력:


첫 번째 줄을 입력하면 정수 N(≤30)을 주고 두 갈래 나무의 결점의 개수입니다.두 번째 줄은 그 후의 서열을 반복한다.세 번째 줄은 그 중의 서열을 반복한다.숫자 사이는 공백으로 구분된다.

출력 형식:


한 줄에서 이 나무의 층층이 흐르는 서열을 출력합니다.숫자 사이는 1개의 공백으로 구분되며, 줄의 앞뒤에 여분의 공백이 있어서는 안 된다.
두 갈래 나무를 이용하여 아들과 뿌리 노드의 하표 관계를 좌우하다
트리를 재구성하는 게 좀 직관적이에요.

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
using namespace std;

const int maxn=35;
int a[maxn];
int b[maxn];
int n;
maplis;
// l1 r1   l2 r2 
void dfs(int num,int l1,int r1,int l2,int r2)
{
    if(l1>r1||l2>r2)return;// 

    lis[num]=a[r2];// 

    int j;// 
    for(int i=1;i<=n;i++)// 
    {
        if(b[i]==a[r2])//j   ( )
        {
            j=i;
            break;
        }
    }
    int lnum=j-l1;

    dfs(num*2,l1,j-1,  l2,     l2+lnum-1);
    dfs(num*2+1,j+1,r1,l2+lnum,r2-1      );
}



int main()
{
    cin>>n;
    for(int i=1;i<=n;i++)cin>>a[i];// 
    for(int i=1;i<=n;i++)cin>>b[i];// 
    dfs(1,1,n,1,n);
    int fir=1;
    for(auto x:lis)
    {
        if(fir==1)fir=0;
        else cout<

 

 

L2 011

, , 。 , 。 。

형식 입력:

N(≤30), 두 갈래 나무의 결점 개수입니다.두 번째 줄은 그 중의 서열을 반복한다.세 번째 줄은 앞의 순서를 반복해서 보여 준다.숫자 사이는 공백으로 구분된다.

출력 형식:


한 줄에서 이 트리가 반전된 후 겹쳐진 시퀀스를 출력합니다.숫자 사이는 1개의 공백으로 구분되며, 줄의 앞뒤에 여분의 공백이 있어서는 안 된다.
 
n아주 어렸을 때 나무를 재구성했다.폭력적이고 직관적이에요.
층차적으로 거울 출력을 반복하면 이 층을 거꾸로 반복하면 됩니다.

#include 
using namespace std;
const int maxn=1e3+5;
int a[maxn],b[maxn];
maptree;
void dfs(int num,int l1,int r1,int l2,int r2)
{
    if(l1>r1||l2>r2)return;
    tree[num]=b[l2];
    int j;
    for(int i=l1;i<=r1;i++)
    {
        if(a[i]==b[l2])// 
        {
            j=i;
            break;
        }
    }
    int l_num=j-l1;// 

    dfs(num*2,  l1, j-1,l2+1,l2+l_num);
    dfs(num*2+1,j+1,r1 ,l2+l_num+1,r2 );

}

int main()
{
    int n;
    cin>>n;
    for(int i=1;i<=n;i++)cin>>a[i];// 
    for(int i=1;i<=n;i++)cin>>b[i];// 
    dfs(1,1,n,1,n);

    //for(auto x:tree)cout<=now;i--)
        {
            if(tree.find(i)!=tree.end())
            {
                cout<

 

좋은 웹페이지 즐겨찾기