トラバーサルを理解する
トピック:
既知の二分木の事前注文トラバーサルは次のとおりです。ABDEGCF
ミドルオーダートラバーサルは次のとおりです。DBGEACF
次に、注文後のトラバーサルは次のとおりです。
図面分析
二分木探索コード(再帰的アルゴリズム)
typedef:ユーザー定義のデータ型に新しい名前を付けるため
#include <stdio.h>
#include <stdlib.h>
typedef char DataType;
typedef struct Node
{
DataType data;
struct Node * LChild;
struct Node * RChild;
}BiTNode,* BiTree;
//创建
void CreateNode (BiTree *T)
{
DataType ch;
scanf("%c",&ch);
if(ch=='#')
*T=NULL;
else{
*T=(BiTree) malloc (sizeof(Node ));
(*T)->data=ch;
CreateNode(&(*T)->LChild);
CreateNode(&(*T)->RChild);
}
}
//输出
void Ch(DataType ch)
{
printf(" %c ",ch);
}
//先序遍历二叉树
void PreOrder(BiTree T)
{
if(T!=NULL)
{
Ch(T->data);
PreOrder(T->LChild);
PreOrder(T->RChild);
}
}
//中序遍历
void InOrder(BiTree T)
{
if(T!=NULL)
{
InOrder(T->LChild);
Ch(T->data);
InOrder(T->RChild);
}
}
//后序遍历
void PostOrder(BiTree T)
{
if(T!=NULL)
{
PostOrder(T->LChild);
PostOrder(T->RChild);
Ch(T->data);
}
}
int main()
{
BiTree T;
printf("按先序遍历输入(没有孩子的输入#): \n");
CreateNode(&T);
printf("先序遍历: \n");
PreOrder(T);
printf("\n");
printf("中序遍历: \n");
InOrder(T);
printf("\n");
printf("后序遍历: \n");
PostOrder(T);
printf("\n");
return 0;
}
など
次に、注文後のトラバーサルは次のとおりです。DGEBFCA