ツリーの出力(C++版)
1178 ワード
ツリーの印刷出力方式は、先順遍歴、中順遍歴、後順遍歴の出力方式のほか、階層出力とツリー状出力の方式もある.
1.階層出力ツリーのノード
アルゴリズム思想:キューqueueを定義し、ツリーのルートノードから順に各レイヤのノードへのポインタをキューに入れます.次に、キューヘッダ要素をキューに出し、そのポインタが指すノード値を出力し、そのノードの左右の子供が空でなければ、左右の子供のノードのポインタをキューに入れます.対空になるまで、以上の操作を繰り返します.
アルゴリズム思想:ツリー状に二叉木を印刷すると、実は二叉木を反時計回りに90度回転させて表示します.ツリーが空の場合は、戻りを実行します.そうでなければ、右サブツリーの印刷を再帰的に実行し、階層を1に追加します.次に、階層に基づいてスペース数を印刷し、ルートノードを出力します.最後に左サブツリーを再帰的に印刷します.
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
}