この問題は、バイナリツリートラバーサルの4種類を設定する必要があります。
関数インタフェースの定義:
void InorderTraversal( BinTree BT );
void PreorderTraversal( BinTree BT );
void PostorderTraversal( BinTree BT );
void LevelorderTraversal( BinTree BT );
ここで次のようにBinTree構造が定義されています。
typedef struct TNode *Position;
typedef Position BinTree;
struct TNode{
ElementType Data;
BinTree Left;
BinTree Right;
};
これは、空白文字の書式が続く、4つの機能は、ノードのコンテンツにアクセスするために印刷されている必要があり。
審判のテストプログラムの例:
#include <stdio.h>
#include <stdlib.h>
typedef char ElementType;
typedef struct TNode *Position;
typedef Position BinTree;
struct TNode{
ElementType Data;
BinTree Left;
BinTree Right;
};
BinTree CreatBinTree(); /* 实现细节忽略 */
void InorderTraversal( BinTree BT );
void PreorderTraversal( BinTree BT );
void PostorderTraversal( BinTree BT );
void LevelorderTraversal( BinTree BT );
int main()
{
BinTree BT = CreatBinTree();
printf("Inorder:"); InorderTraversal(BT); printf("\n");
printf("Preorder:"); PreorderTraversal(BT); printf("\n");
printf("Postorder:"); PostorderTraversal(BT); printf("\n");
printf("Levelorder:"); LevelorderTraversal(BT); printf("\n");
return 0;
}
/* 你的代码将被嵌在这里 */
サンプル出力(図のツリーは、与えられました):
Inorder: D B E F A G H C I
Preorder: A B D F E C G H I
Postorder: D E F B H G I C A
Levelorder: A B C D F G I E H
コード:
void InorderTraversal( BinTree BT )//中序遍历
{
if(BT)
{
InorderTraversal(BT->Left);
printf(" %c",BT->Data);
InorderTraversal(BT->Right);
}
}
void PreorderTraversal( BinTree BT )//先序遍历
{
if(BT)
{
printf(" %c",BT->Data);
PreorderTraversal(BT->Left);
PreorderTraversal(BT->Right);
}
}
void PostorderTraversal( BinTree BT )//后续遍历
{
if(BT)
{
PostorderTraversal(BT->Left);
PostorderTraversal(BT->Right);
printf(" %c",BT->Data);
}
}
void LevelorderTraversal( BinTree BT ) //层序遍历
{
BinTree p; //定义结构体变量
BinTree q[20];//定义结构体数组,注意数组空间大小要适合
int m=0,n=0;
if(!BT) return 0;
else //如果数不为空
{
q[n++]=BT;
while(m!=n)
{
p=q[m++];
printf(" %c",p->Data);
if(p->Left!=NULL) q[n++]=p->Left;
if(p->Right!=NULL) q[n++]=p->Right;
//先将左右子树存放到数组中 ,再输出
}
}
}
:トラバーサル配列解析考え
分析:黒三角は、P = Q、Pの意味を表す[Mを++ ]、 pは、ルートノードへのアクセス、ルート・ノードかどうかが判定された場合の順序がアクセスバイナリツリーであることが分かるで左及び右サブツリー左右のサブツリーをP、配列Qに時系列に格納され、背面にアクセスするために、各アクセス構成要素は、それが左右のサブツリーの存在であるか否かを判断するように存在する場合、問題が存在し、それがあろう左と右の順に格納されているQのサブツリー、そのように、約つのアクセスノードとアレイQの記憶素子の特性が整列されるように、保存された配列の順序の次数pとして、左後に場合p接合アクセスM = N、すべてのノードがバイナリアクセスが終了した時点、すなわち、Qが二分木構造のアレイ配列に格納されている場合。