(二)二叉樹の抽象的なデータタイプの定義と遍歴
2084 ワード
タイプ名:フォークツリー
データの対象セット:貧しい集合点があります.空でないとルートノードとその左、右のフォークツリーからなります.
操作セット:
Boolean isempty
(
BinTree BT
)0
//BTが空かどうか判別する
void
Traversal
(
BinTree BT
)0
//遍歴して、各結点をある順に訪問します.
BinTree Creat BinTree
()
//フォークツリーを作成する
//一般的なエルゴード方法は以下の通りです.
void
PreOrder Traversal
(
BinTree BT
)0
//先序-----根、左子樹、右子樹
void
InOrder Traversal
(
BinTree BT
)0
//中序-----左子樹、根、右子樹
void
LevelOrder Traversal
(
BinTree BT
)0
//後順に遍歴-----左子樹、右子樹、根
(1)まず、巡回
プロセスを巡回:1、ルートノードにアクセスします.2、左サブツリーにアクセスします.3、右サブツリーにアクセスします.
プロセスを巡回しました.1、左のツリーにアクセスします.2、ルートノードにアクセスする.3、右サブツリーにアクセスする
プロセスを巡回しました.1、左のツリーにアクセスします.2、右サブツリーにアクセスします.3、ルートノードにアクセスする
データの対象セット:貧しい集合点があります.空でないとルートノードとその左、右のフォークツリーからなります.
操作セット:
Boolean isempty
(
BinTree BT
)0
//BTが空かどうか判別する
void
Traversal
(
BinTree BT
)0
//遍歴して、各結点をある順に訪問します.
BinTree Creat BinTree
()
//フォークツリーを作成する
//一般的なエルゴード方法は以下の通りです.
void
PreOrder Traversal
(
BinTree BT
)0
//先序-----根、左子樹、右子樹
void
InOrder Traversal
(
BinTree BT
)0
//中序-----左子樹、根、右子樹
void
LevelOrder Traversal
(
BinTree BT
)0
//後順に遍歴-----左子樹、右子樹、根
(1)まず、巡回
プロセスを巡回:1、ルートノードにアクセスします.2、左サブツリーにアクセスします.3、右サブツリーにアクセスします.
void PreOrderTraversal(BinTree BT)
{
if(BT){
printf("%d",BT->Data);
PreOrderTraversal(BT->Left);
PreOrderTraversal(BT->Right);
}
}
(2)中順序巡回プロセスを巡回しました.1、左のツリーにアクセスします.2、ルートノードにアクセスする.3、右サブツリーにアクセスする
void InOrderTraversal(BinTree BT) //
{
if(BT){
InOrderTraversal(BT->Left);
printf("%d",BT->Data);
InOrderTraversal(BT->Right);
}
}
(3)を巡回しました.プロセスを巡回しました.1、左のツリーにアクセスします.2、右サブツリーにアクセスします.3、ルートノードにアクセスする
void LevelOrderTraversal(BinTree BT)//
{
if(BT){
LevelOrderTraversal(BT->Left);
LevelOrderTraversal(BT->Right);
printf("%d",BT->Data);
}
}
で巡回された非再帰的アルゴリズムvoid InOrderTraversal( BinTree BT )
{
BinTree T = BT;
Stack S = CreatStack( MaxSize ); /* S*/
while( T || !IsEmpty(S) ){
while(T){ /* */
Push(S,T);
T = T->Left;
}
if(!IsEmpty(S)){
T = Pop(S); /* */
printf(“%5d”, T->Data); /*( ) */
T = T->Right; /* */
}
}
}
最初に非再帰的アルゴリズムを巡回します.void InOrderTraversal( BinTree BT )
{
BinTree T = BT;
Stack S = CreatStack( MaxSize ); /* S*/
while( T || !IsEmpty(S) ){
while(T){ /* */
Push(S,T);
printf(“%5d”, T->Data); /*( ) */
T = T->Left;
}
if(!IsEmpty(S)){
T = Pop(S); /* */
T = T->Right; /* */
}
}
}