「AOJ Problem Set from ALDS1 問20~24」の編集履歴(バックアップ)一覧に戻る

AOJ Problem Set from ALDS1 問20~24 - (2014/01/17 (金) 03:42:53) の編集履歴(バックアップ)


Tree - Tree Walk

http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ALDS1_7_C&lang=jp
2分木をデータから組み立て順番に訪問した結果を出力する問題。


#include<stdio.h>

const int LIMIT=26;
const int NIL=-1;
struct node{
	int p,right,left;
};
node Tree[LIMIT];


void Preorder(int p){
	if(p==-1)return;
	printf(" %d",p);
	Preorder(Tree[p].left);
	Preorder(Tree[p].right);
}
void Inorder(int p){
	if(p==-1)return;
	Inorder(Tree[p].left);
	printf(" %d",p);
	Inorder(Tree[p].right);
}
void Postorder(int p){
	if(p==-1)return;
	Postorder(Tree[p].left);
	Postorder(Tree[p].right);
	printf(" %d",p);
} 


int main(){
	int n,l,r,no;
	scanf("%d",&n);
	for(int i=0;i<n;i++)Tree[i].p=NIL;
	for(int i=0;i<n;i++){
 		scanf("%d %d %d",&no,&l,&r);
		Tree[no].left=l;
		Tree[no].right=r;
		Tree[l].p=Tree[r].p=no;
	}
	int p=0;
	for(int i=0;i<n;i++)if(Tree[i].p==NIL)p=i;
	printf("Preorder\n");
 	Preorder(p);
printf("\nInorder\n");
 	Inorder(p);
	printf("\nPostorder\n");
 	Postorder(p);
	printf("\n");
}