タイトル1485:二叉チェーンテーブルに格納された二叉木

2647 ワード

タイトルの説明
ツリー構造は、ツリーとツリーで最もよく使用される重要な非線形データ構造です.各ノードに対して最大2課のサブツリーしかないツリーの1種類を二叉ツリーと呼ぶ.ツリーのチェーンストレージ構造は、次のように定義された重要なデータ構造です.
一方、ツリーの前シーケンス、中シーケンスの遍歴は、ツリーのすべてのノードにアクセスできるアルゴリズムとして非常に重要であり、以下に、先シーケンスの遍歴と2つの中シーケンスの遍歴のアルゴリズムをそれぞれリストする.
1つ目の中順遍歴方法(アルゴリズム6.3):
第2の中間シーケンス遍歴方法(アルゴリズム6.2):
文字列を読み込むことで、ツリーを作成するアルゴリズムは次のとおりです.
この問題では、空のサブノードを表すスペースと、ノードの内容を表す大文字の文字列を先に繰り返します.この文字列を使用してツリーを作成し、タイトルの説明の1つのシーケンスループと2つのシーケンスループのアルゴリズムに従って、各非空ノードを出力してください.
 
入力
入力は1行のみで、二叉木を作成するための文字列Sが含まれています.Sが合法的な二叉木先順遍歴文字列であることを保証し、ノードの内容は大文字のみであり、Sの長さは100を超えない.
 
しゅつりょく
3行あり、各行には一連の文字が含まれており、それぞれ先順、中順、中順で得られたノードの内容を表し、各アルファベットの後にスペースを出力します.行末出力改行に注意してください.
 
サンプル入力
ABC  DE G  F   

 
サンプル出力
A B C D E G F 
C B E G D F A 
C B E G D F A 

 
ヒント[+]
***プロンプトが非表示になっているので、上[+]をクリックすると***が表示されます.
 
ソース
データ構造アルゴリズムの教育問題
 
/*********************************
 *      :2013-3-7
 *      :SJF0115
 *      :   OJ   1485:           
 *      :http://acmclub.com/problem.php?id=1485
 *      :AC
 *      :         
 *      :
**********************************/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

char array[101];

//     
typedef struct BiTNode{
	char data;
	struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;

//          
int CreateBiTree(BiTree &T,int &index,int &n){
	if(index >= n){
		return 0;
	}
	//               (    ),      
	if(array[index] == ' '){
		T = NULL;
		index++;
	}
	else{
		T = (BiTree)malloc(sizeof(BiTNode));
		//     
		T->data = array[index];
		index++;
		//     
		CreateBiTree(T->lchild,index,n);
		//     
		CreateBiTree(T->rchild,index,n);
	}
	return 0;
}
//  
void Visit(BiTree T){
	printf("%c ",T->data);
}
//    
void PreOrder(BiTree T){
	if(T != NULL){
		//     
		Visit(T);
		//      
		PreOrder(T->lchild);
		//      
		PreOrder(T->rchild);
	}
}
//    
void InOrder(BiTree T){
	if(T != NULL){
		//      
		InOrder(T->lchild);
		//     
		Visit(T);
		//      
		InOrder(T->rchild);
	}
}
//    
void PostOrder(BiTree T){
	if(T != NULL){
		//      
		PostOrder(T->lchild);
		//      
		PostOrder(T->rchild);
		//     
		Visit(T);
	}
}
int main()
{
	int len,index;
	while(gets(array)){
		BiTree T;
		len = strlen(array);
		index = 0;
		//     
		CreateBiTree(T,index,len);
		//    
		PreOrder(T);
		printf("
"); // index = 0; InOrder(T); printf("
"); // index = 0; InOrder(T); printf("
"); } return 0; }