나무의 기본 구조와 두루

1643 단어
제목:1020.Tree Traversals (25)
 
제목 설명:
이미 알고 있는 트리의postorder(후차 범람)와inorder(중차 범람)는 완전한 트리를 구성하고 차원별로 출력수를 범람합니다
 
코드 프리젠테이션 1(알려진 후 및 에서 계층 이동):
 
#include 
#include 
using namespace std;

const int maxn=1e3+5;
int a[maxn],b[maxn];
struct Tree{
	Tree *left,*right;
	int data;
};

Tree *buildtree(int la,int ra,int lb,int rb){
	if (la>ra) return NULL;
	int p;
	for (int i=lb;i<=rb;i++) 
		if (b[i]==a[ra]) {
			p=i;
			break;
		}
	Tree *tree=new Tree;
	tree->data  = a[ra];
	tree->left  = buildtree (la,la+(p-lb)-1,lb,p-1);
	tree->right = buildtree (la+(p-lb),ra-1,p+1,rb);
	return tree;
}
void print_levelorder(Tree *root){
	queue < Tree * > q;
	q.push(root);
	while(!q.empty()){
		Tree *tree=new Tree;
		tree=q.front();
		q.pop();
		cout<data;
		if (tree->left!=NULL)  q.push(tree->left);
		if (tree->right!=NULL) q.push(tree->right);
	}
}
int main(){
//	freopen("datain.txt","r",stdin);
	int n;
	cin>>n;
	for (int i=1;i<=n;i++) cin>>a[i];
	for (int i=1;i<=n;i++) cin>>b[i];
	Tree *root=buildtree(1,n,1,n);
	print_levelorder(root);
}
 
 
코드 프리젠테이션 2(알려진 이전 및 중, 계층 이동):
트리의 일부 코드만 변경하면 됩니다
 
Tree *buildtree(int la,int ra,int lb,int rb){
	if (la>ra) return NULL;
	int p;
	for (int i=lb;i<=rb;i++) 
		if (b[i]==a[la]) {
			p=i;
			break;
		}
	Tree *tree=new Tree;
	tree->data  = a[la];
	tree->left  = buildtree (la+1,la+(p-lb),lb,p-1);
	tree->right = buildtree (la+(p-lb)+1,ra,p+1,rb);
	return tree;
}
 
 
 
 
 

좋은 웹페이지 즐겨찾기