ツリーの出力(C++版)


ツリーの印刷出力方式は、先順遍歴、中順遍歴、後順遍歴の出力方式のほか、階層出力とツリー状出力の方式もある.
1.階層出力ツリーのノード
アルゴリズム思想:キューqueueを定義し、ツリーのルートノードから順に各レイヤのノードへのポインタをキューに入れます.次に、キューヘッダ要素をキューに出し、そのポインタが指すノード値を出力し、そのノードの左右の子供が空でなければ、左右の子供のノードのポインタをキューに入れます.対空になるまで、以上の操作を繰り返します.
void LevelPrint(BiTree T)
{
	BiTree queue[MaxSize];	//      ,         
	BitNode *p;
	int front=-1,rear=-1;
	rear++;
	queue[rear]=T;
	while(front!=rear)
	{
		front=(front+1)%MaxSize;
		p=queue[front];		//      
		printf("%c ",p->data);	//     
		if (p->lchild!=NULL)	//        ,          
		{
			rear=(rear+1)%MaxSize;
			queue[rear]=p->lchild;
		}
		if (p->rchild!=NULL)	//        ,          
		{
			rear=(rear+1)%MaxSize;
			queue[rear]=p->rchild;
		}
	}
}
2.ツリーによるツリーの印刷
アルゴリズム思想:ツリー状に二叉木を印刷すると、実は二叉木を反時計回りに90度回転させて表示します.ツリーが空の場合は、戻りを実行します.そうでなければ、右サブツリーの印刷を再帰的に実行し、階層を1に追加します.次に、階層に基づいてスペース数を印刷し、ルートノードを出力します.最後に左サブツリーを再帰的に印刷します.
void TreePrint(BiTree T,int level)
{
	if (!T)				//      ,     
	{
		return;
	}
	TreePrint(T->rchild,level+1);	//     ,     1
	for (int i=0;idata);	//     
	TreePrint(T->lchild,level+1);	//     ,     1
}