pat-1020

Remplissez clairement les paramètres de base des questions 

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
vector<int> in,post;
struct node{
	int data;
	int index;
	
};
vector<node> level;
int n;
void dfs(int root,int inl,int inr ,int index)
{
	//end
	if(inl>inr) return;
	int i=inl;
	while(post[root]!=in[i])i++;
	
	//这里应该是左子树的根而不是想当然的root-1要先确定左子树的范围再根据序列确定 (注意)
	//i是在中序中的位置不是后序 (注意)
	//决定以后不用inr inl 不容易发现错误 inll,inrr;
	//不是整个的根节点始终是后序中提供的根节点 ,也注意这里是找的是子树中的根节点 
	dfs(root-1-(inr-i),inl,i-1,2*index+1);
	//入得到底是谁的root是谁的 
	level.push_back({post[root],index});
	dfs(root-1,i+1,inr,2*index+2);
}
bool cmp(node a,node b)
{
	 return a.index<b.index;
}
int main()
{
	cin>>n;
	for(int i=0;i<n;i++)
	{ int temp;
	cin>>temp;
	post.push_back(temp);
    }  
    for(int i=0;i<n;i++)
    {
    	int temp1;
    	cin>>temp1;
    	in.push_back(temp1);
	}
	dfs(n-1,0,n-1,0);
	sort(level.begin(),level.end(),cmp);
	printf("%d",level[0].data); 
	for(int i=1;i<level.size();i++)
	printf(" %d",level[i].data);
	return 0;
	
}

 Pour résumer

1. S'il y a un numéro de séquence, il s'agit simplement d'une séquence normale. Pour le moment, cela n'a rien à voir avec le programme. Utilisez simplement l'index pour être lié à la séquence plus la séquence

2. Corrigez les erreurs enregistrées auparavant. L'entrée ici n'est pas dans la plage du tableau, mais dans quel ordre la racine se trouve au début.

3. Il doit s'agir de la racine du sous-arbre de gauche au lieu de root-1. Déterminez d'abord la plage du sous-arbre de gauche, puis déterminez-la en fonction de la séquence. La racine du sous-arbre de gauche dans le post-ordre (note)

4. // i est la position dans la séquence du milieu, pas la séquence post (note)
    // a décidé de ne pas utiliser inr inl, il n'est pas facile de trouver des erreurs inll, inrr;
    // tout le nœud racine n'est pas toujours le nœud racine fourni dans la séquence de publication, notez également que voici le nœud racine dans le sous-arbre 

Anglais

non

problème

Pour diverses séquences, ce qu'il faut remplir dans les paramètres de l'autre séquence doit être clairement et correctement maîtrisé avant et après la deuxième, et les première et deuxième couches ne sont pas fixes. Il s'agit d'une période relativement particulière.

Je suppose que tu aimes

Origine blog.csdn.net/m0_45359314/article/details/112714391
conseillé
Classement