编写程序实现二叉树的创建,先序、中序、后序的递归遍历算法。在此基础上设计一个主程序完成如下功能:
(1)依次读入字符“ABD∅∅E∅∅C∅FG∅∅H∅∅”,按照先序建立二叉树T(∅表示空格);
(2)先序递归遍历二叉树T,输出遍历序列;
(3)中序递归遍历二叉树T,输出遍历序列;
(4)后序递归遍历二叉树T,输出遍历序列。
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define MAXSIZE 70
typedef struct BiTreeNode
{
char data;
struct BiTreeNode *left;
struct BiTreeNode *right;
}BiTreeNode, *BiTree;
void CreateBiTree(BiTree *T)
{
char val;
scanf_s("%c", &val);
if (val == '0')
*T = NULL; //null表示为空枝
else
{
*T = (BiTree)malloc(sizeof(BiTreeNode));
(*T)->data = val;
CreateBiTree(&(*T)->left);
CreateBiTree(&(*T)->right);
}
}
void PreOrderTravel(BiTree T)
{
if (T == NULL)
return;
printf("%c ", T->data);
PreOrderTravel(T->left);
PreOrderTravel(T->right);
}
void InOrderTravel(BiTree T)
{
if (T == NULL)
return;
InOrderTravel(T->left);
printf("%c ", T->data);
InOrderTravel(T->right);
}
void TailOrderTravel(BiTree T)
{
if (T == NULL)
return;
TailOrderTravel(T->left);
TailOrderTravel(T->right);
printf("%c ", T->data);
}
int main()
{
BiTree T;
T = (BiTree)malloc(sizeof(BiTreeNode));
printf("输入结点的值:\n");
CreateBiTree(&T);
printf("先序遍历:\n");
PreOrderTravel(T);
printf("\n");
printf("中序遍历:\n");
InOrderTravel(T);
printf("\n");
printf("后序遍历:\n");
TailOrderTravel(T);
printf("\n");
return 0;
}
运行截图:
