先准备一个二叉树
如图所示
下面是该二叉树的实现,以及调用测试
#include "BinaryTree.h"
int main()
{
BTNode* A = (BTNode*)malloc(sizeof(BTNode));
A->data='A';
A->left = NULL;
A->right = NULL;
BTNode* B = (BTNode*)malloc(sizeof(BTNode));
B->data='B';
B->left = NULL;
B->right = NULL;
BTNode* C = (BTNode*)malloc(sizeof(BTNode));
C->data='C';
C->left = NULL;
C->right = NULL;
BTNode* D = (BTNode*)malloc(sizeof(BTNode));
D->data='D';
D->left = NULL;
D->right = NULL;
BTNode* E = (BTNode*)malloc(sizeof(BTNode));
E->data='E';
E->left = NULL;
E->right = NULL;
A->left = B;
A->right = C;
B->left = D;
B->right = E;
PrevOder(A);
printf("\n");
InOder(A);
printf("\n");
PostOder(A);
printf("\n");
return 0;
}
前中后序的实现
//前序,中序,后序的命名其实是根据根访问的前后位置来命名
//根 左子树 右子树
#include "BinaryTree.h"
void PrevOder(BTNode* root)//前序遍历
{
if (root == NULL)
{
printf("NULL ");
return;
}
printf("%c", root->data);
printf(" ");
PrevOder(root->left);
PrevOder(root->right);
}
//左子树 根 右子树
void InOder(BTNode* root)//中序遍历
{
if (root == NULL)
{
printf("NULL ");
return;
}
InOder(root->left);
printf("%c", root->data);
printf(" ");
InOder(root->right);
}
//左子树 右子树 根
void PostOder(BTNode* root)//后序遍历
{
if (root == NULL)
{
printf("NULL ");
return;
}
PostOder(root->left);
PostOder(root->right);
printf("%c",root->data);
printf(" ");
}
前序遍历的左树的递归展示图
头文件
#include <stdio.h>
#include <stdlib.h>
typedef char BTDataType;
typedef struct BinaryTreeNode
{
struct BinaryTreeNode* left;
struct BinaryTreeNode* right;
BTDataType data;
}BTNode;
void PrevOder(BTNode* root);
void InOder(BTNode* root);
void PostOder(BTNode* root);