以下是C语言中二叉树的三种遍历方式(前序遍历、中序遍历和后序遍历)的代码实现:
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int data;
struct Node* left;
struct Node* right;
} Node;
// 创建新节点
Node* createNode(int data) {
Node* newNode = (Node*)malloc(sizeof(Node));
if(newNode == NULL) {
printf("内存分配失败!\n");
exit(1);
}
newNode->data = data;
newNode->left = NULL;
newNode->right = NULL;
return newNode;
}
// 前序遍历
void preorderTraversal(Node* root) {
if(root != NULL) {
printf("%d ", root->data); // 先访问根节点
preorderTraversal(root->left); // 再前序遍历左子树
preorderTraversal(root->right); // 最后前序遍历右子树
}
}
// 中序遍历
void inorderTraversal(Node* root) {
if(root != NULL) {
inorderTraversal(root->left); // 先中序遍历左子树
printf("%d ", root->data); // 再访问根节点
inorderTraversal(root->right); // 最后中序遍历右子树
}
}
// 后序遍历
void postorderTraversal(Node* root) {
if(root != NULL) {
postorderTraversal(root->left); // 先后序遍历左子树
postorderTraversal(root->right); // 再后序遍历右子树
printf("%d ", root->data); // 最后访问根节点
}
}
int main() {
// 创建二叉树
Node* root = createNode(1);
root->left = createNode(2);
root->right = createNode(3);
root->left->left = createNode(4);
root->left->right = createNode(5);
// 前序遍历二叉树
printf("前序遍历:");
preorderTraversal(root);
printf("\n");
// 中序遍历二叉树
printf("中序遍历:");
inorderTraversal(root);
printf("\n");
// 后序遍历二叉树
printf("后序遍历:");
postorderTraversal(root);
printf("\n");
return 0;
}
这段代码首先定义了一个二叉树节点的结构体 Node
,其中包含数据 data
、左子节点指针 left
和右子节点指针 right
。接着,定义了创建新节点的函数 createNode
,用于动态分配内存,并返回新节点。然后,分别实现了三种遍历方式的函数:preorderTraversal
(前序遍历)、inorderTraversal
(中序遍历)和 postorderTraversal
(后序遍历)。最后,在 main
函数中创建了一个二叉树,并分别调用了三种遍历函数,打印出遍历结果。