ツリーの再帰的確立(シーケンス、中シーケンス、後シーケンス)
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;
}
理解しにくい場合は、簡単なシミュレーション再帰を試してみましょう.