ツリーの再帰的確立(シーケンス、中シーケンス、後シーケンス)

1793 ワード


実は再帰的な考えです.本には、先序再帰が実現したという方法があるが、方法は同じだ.本プログラムの入力はすべてシーケンスシーケンスであり,二叉木を構築する方法が異なるだけである.
ツリーを巡るコードについては、次の文章を書きます.
ツリーの順序付け:ルートノードにアクセスし、左サブツリー、右サブツリーにアクセスします.
void CreateBiTree(BiTree *T)//     
{
  	char ch;
  	scanf("%c",&ch);
  	if(ch=='#') *T=NULL;
  	else{
  		*T =  (BiTNode *)malloc(sizeof(BiTNode));//    
  		if(!(*T))//       
  			return;
  		(*T)->data=ch;//      
  		CreateBiTree(&(*T)->lchild);//      
  		CreateBiTree(&(*T)->rchild);//      
	  }
	return;
}

中序確立:まず左のサブツリー、更にルートノードを尋ねて、更に右のサブツリー.
void  CreateBiTree(BiTree *T)//        
{
	char ch;
  	scanf("%c",&ch);
  	if(ch=='#') 
	{
		*T = NULL;
	}
	else
  	{
  		*T =  (BiTNode *)malloc(sizeof(BiTNode));//    
  		CreateBiTree(&(*T)->lchild);//      
  		(*T)->data = ch;
		CreateBiTree(&(*T)->rchild);//      
	}
}

後序確立:左サブツリー、右サブツリー、ルートノードを訪問します.
void CreateBiTree(BiTree *T)//      
{
	char ch;
  	scanf("%c",&ch);
  	if(ch=='#') 
	{
		*T = NULL;
	}
  	else
  	{
  		*T =  (BiTNode *)malloc(sizeof(BiTNode));//    
		CreateBiTree(&(*T)->lchild);//      
		CreateBiTree(&(*T)->rchild);//      
		(*T)->data = ch;
	}
} 

テスト:
#include 
#include 
#include 
typedef char TElemType;//             
typedef struct BiTNode{//             
	TElemType data;
	struct BiTNode *lchild,*rchild;//       
}BiTNode,*BiTree;
void InitBiTree(BiTree *T)//      
{
	*T = NULL;
} 
int main()
{
	BiTree BT;
 	InitBiTree(&BT);//      
 	CreateBiTree(&BT);//       
    PreOrder(BT);
	return 0;
}

理解しにくい場合は、簡単なシミュレーション再帰を試してみましょう.