本题要求给定二叉树的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个函数分别按照访问顺序打印出结点的内容,格式为一个空格跟着一个字符。
代码
void InorderTraversal( BinTree BT ) { // 中序
if (!BT) return;
InorderTraversal(BT->Left);
printf(" %c", BT->Data);
InorderTraversal(BT->Right);
}
void PreorderTraversal( BinTree BT ) { // 先序
if (!BT) return;
printf(" %c", BT->Data);
PreorderTraversal(BT->Left);
PreorderTraversal(BT->Right);
}
void PostorderTraversal( BinTree BT ) { // 后序
if (!BT) return;
PostorderTraversal(BT->Left);
PostorderTraversal(BT->Right);
printf(" %c", BT->Data);
}
void LevelorderTraversal( BinTree BT ) { // 层序
if (!BT) return;
BinTree que[1000];
int front = -1, rear = -1;
que[++rear] = BT;
BinTree node;
while (front < rear) {
node = que[++front];
printf(" %c", node->Data);
if (node->Left) {
que[++rear] = node->Left;
}
if (node->Right) {
que[++rear] = node->Right;
}
}
}