先序
void PreOrder(BiTree T)
/*先序遍历二叉树, root 为指向二叉树(或某一子树)根结点的指针*/
{
if (T != NULL)
{
printf("%c ", T->data); /*访问根结点*/
PreOrder(T->lchild); /*先序遍历左子树*/
PreOrder(T->rchild); /*先序遍历右子树*/
}
}
中序
void InOrder(BiTree T)
/*中序遍历二叉树, root 为指向二叉树(或某一子树)根结点的指针*/
{
if (T != NULL)
{
InOrder(T->lchild); /*中序遍历左子树*/
printf("%c ", T->data); /*访问根结点*/
InOrder(T->rchild); /*中序遍历右子树*/
}
}
后序
void PostOrder(BiTree T)
/* 后序遍历二叉树,root 为指向二叉树(或某一子树)根结点的指针*/
{
if (T != NULL)
{
PostOrder(T->lchild); /*后序遍历左子树*/
PostOrder(T->rchild); /*后序遍历右子树*/
printf("%c ", T->data); /*访问根结点*/
}
}
总代码
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100
//定义二叉树的结构体
typedef struct BiNode {
char data;
struct BiNode* lchild;
struct BiNode* rchild;
}BiNode, * BiTree;
//先序创建二叉树
BiTree CreateBiTree() {
BiNode* T = NULL;
char ch;
ch = getchar();//先序输入树的各个节点值
if (ch != '#') {
T = (BiNode*)malloc(sizeof(BiNode));
T->data = ch;
T->lchild = CreateBiTree();
T->rchild = CreateBiTree();
}
else {
T = NULL;
}
return T;
}
void PreOrder(BiTree T)
/*先序遍历二叉树, root 为指向二叉树(或某一子树)根结点的指针*/
{
if (T != NULL)
{
printf("%c ", T->data); /*访问根结点*/
PreOrder(T->lchild); /*先序遍历左子树*/
PreOrder(T->rchild); /*先序遍历右子树*/
}
}
void InOrder(BiTree T)
/*中序遍历二叉树, root 为指向二叉树(或某一子树)根结点的指针*/
{
if (T != NULL)
{
InOrder(T->lchild); /*中序遍历左子树*/
printf("%c ", T->data); /*访问根结点*/
InOrder(T->rchild); /*中序遍历右子树*/
}
}
void PostOrder(BiTree T)
/* 后序遍历二叉树,root 为指向二叉树(或某一子树)根结点的指针*/
{
if (T != NULL)
{
PostOrder(T->lchild); /*后序遍历左子树*/
PostOrder(T->rchild); /*后序遍历右子树*/
printf("%c ", T->data); /*访问根结点*/
}
}
int main() {
printf("已知先序序列为:ABC##DE#G##F### \n");
BiTree T = CreateBiTree();
// BiTree T = create_tree();
printf("递归先序遍历二叉树:\n");
PreOrder(T);
printf("\n");
printf("递归中序遍历二叉树:\n");
InOrder(T);
printf("\n");
printf("递归后序遍历二叉树:\n");
PostOrder(T);
printf("\n");
return 0;
}