本题要求给定二叉树的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 p) { if(p) { InorderTraversal(p->Left); printf(" %c",p->Data); InorderTraversal(p->Right); } } //先序遍历 void PreorderTraversal(BinTree p) { if(p) { printf(" %c",p->Data); PreorderTraversal(p->Left); PreorderTraversal(p->Right); } } //后序遍历 void PostorderTraversal(BinTree p) { if(p) { PostorderTraversal(p->Left); PostorderTraversal(p->Right); printf(" %c",p->Data); } } //层序遍历 void LevelorderTraversal(BinTree p) { int i=0,j=0; BinTree ptr[100]={NULL},ptr1=NULL; if(p!=NULL) { ptr[i++]=p; while(i>j) { ptr1=ptr[j++]; printf(" %c",ptr1->Data); if(ptr1->Left!=NULL)ptr[i++]=ptr1->Left; if(ptr1->Right!=NULL)ptr[i++]=ptr1->Right; } } }