阅读量:0
以下是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
函数中创建了一个二叉树,并分别调用了三种遍历函数,打印出遍历结果。