C语言树状结构遍历
作者:野牛程序员:2024-07-11 13:59:34C语言阅读 2554
C语言树状结构遍历
在C语言中,树状结构的遍历主要有三种方式:前序遍历(Pre-order Traversal)、中序遍历(In-order Traversal)和后序遍历(Post-order Traversal)。每种遍历方法的实现方式稍有不同,下面分别介绍这三种遍历方式。
树节点结构
首先,定义一个树节点的结构:
#include <stdio.h> #include <stdlib.h> // 定义树节点结构 struct TreeNode { int data; struct TreeNode *left; struct TreeNode *right; };
前序遍历
前序遍历的顺序是:访问根节点、遍历左子树、遍历右子树。
void preOrderTraversal(struct TreeNode* root) { if (root == NULL) return; printf("%d ", root->data); // 访问根节点 preOrderTraversal(root->left); // 遍历左子树 preOrderTraversal(root->right); // 遍历右子树 }
中序遍历
中序遍历的顺序是:遍历左子树、访问根节点、遍历右子树。
void inOrderTraversal(struct TreeNode* root) { if (root == NULL) return; inOrderTraversal(root->left); // 遍历左子树 printf("%d ", root->data); // 访问根节点 inOrderTraversal(root->right); // 遍历右子树 }
后序遍历
后序遍历的顺序是:遍历左子树、遍历右子树、访问根节点。
void postOrderTraversal(struct TreeNode* root) { if (root == NULL) return; postOrderTraversal(root->left); // 遍历左子树 postOrderTraversal(root->right); // 遍历右子树 printf("%d ", root->data); // 访问根节点 }
示例
创建一个简单的二叉树并进行遍历示例:
#include <stdio.h> #include <stdlib.h> // 定义树节点结构 struct TreeNode { int data; struct TreeNode *left; struct TreeNode *right; }; // 前序遍历函数 void preOrderTraversal(struct TreeNode* root) { if (root == NULL) return; printf("%d ", root->data); // 访问根节点 preOrderTraversal(root->left); // 遍历左子树 preOrderTraversal(root->right); // 遍历右子树 } // 中序遍历函数 void inOrderTraversal(struct TreeNode* root) { if (root == NULL) return; inOrderTraversal(root->left); // 遍历左子树 printf("%d ", root->data); // 访问根节点 inOrderTraversal(root->right); // 遍历右子树 } // 后序遍历函数 void postOrderTraversal(struct TreeNode* root) { if (root == NULL) return; postOrderTraversal(root->left); // 遍历左子树 postOrderTraversal(root->right); // 遍历右子树 printf("%d ", root->data); // 访问根节点 } // 创建新的树节点 struct TreeNode* createNode(int data) { struct TreeNode* newNode = (struct TreeNode*)malloc(sizeof(struct TreeNode)); if (newNode == NULL) { printf("内存分配失败\n"); exit(1); } newNode->data = data; newNode->left = NULL; newNode->right = NULL; return newNode; } // 释放树的内存 void freeTree(struct TreeNode* root) { if (root == NULL) return; freeTree(root->left); freeTree(root->right); free(root); } int main() { // 创建树节点 struct TreeNode* 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"); // 释放内存 freeTree(root); return 0; }
以上代码展示了如何在C语言中实现树的前序、中序和后序遍历。
野牛程序员教少儿编程与信息学奥赛-微信|电话:15892516892

- 上一篇:c语言遍历结构体每个元素
- 下一篇:C++ 数组实有元素个数