在计算机科学中,二叉树遍历是学习数据结构时必须掌握的基础操作之一。无论你是刚接触编程的小白,还是正在复习算法的开发者,理解二叉树的三种主要遍历方式——前序遍历、中序遍历和后序遍历,都将为你打下坚实的基础。
二叉树是一种树形数据结构,其中每个节点最多有两个子节点,分别称为“左子节点”和“右子节点”。如下图所示:
遍历二叉树就是按照某种顺序访问树中的每一个节点。常见的三种遍历方式都基于“深度优先搜索”(DFS),区别仅在于访问根节点的时机不同。
访问顺序:根节点 → 左子树 → 右子树
前序遍历常用于复制一棵树或生成前缀表达式。
// 前序遍历函数void preorder(struct TreeNode* root) { if (root == NULL) return; printf("%d ", root->data); // 访问根节点 preorder(root->left); // 遍历左子树 preorder(root->right); // 遍历右子树} 访问顺序:左子树 → 根节点 → 右子树
对于二叉搜索树(BST),中序遍历会按升序输出所有节点值。
// 中序遍历函数void inorder(struct TreeNode* root) { if (root == NULL) return; inorder(root->left); // 遍历左子树 printf("%d ", root->data); // 访问根节点 inorder(root->right); // 遍历右子树} 访问顺序:左子树 → 右子树 → 根节点
后序遍历常用于释放内存(先释放子节点再释放父节点)或计算目录大小等场景。
// 后序遍历函数void postorder(struct TreeNode* root) { if (root == NULL) return; postorder(root->left); // 遍历左子树 postorder(root->right); // 遍历右子树 printf("%d ", root->data); // 访问根节点} 下面是一个完整的C语言程序,演示如何定义二叉树并实现三种遍历方式:
#include <stdio.h>#include <stdlib.h>// 定义二叉树节点结构struct TreeNode { int data; struct TreeNode* left; struct TreeNode* right;};// 创建新节点struct TreeNode* createNode(int value) { struct TreeNode* newNode = (struct TreeNode*)malloc(sizeof(struct TreeNode)); newNode->data = value; newNode->left = NULL; newNode->right = NULL; return newNode;}// 前序遍历void preorder(struct TreeNode* root) { if (root == NULL) return; printf("%d ", root->data); preorder(root->left); preorder(root->right);}// 中序遍历void inorder(struct TreeNode* root) { if (root == NULL) return; inorder(root->left); printf("%d ", root->data); inorder(root->right);}// 后序遍历void postorder(struct TreeNode* root) { if (root == NULL) return; postorder(root->left); postorder(root->right); printf("%d ", root->data);}// 主函数int main() { // 构建如下二叉树: // 1 // / \ // 2 3 // / \ // 4 5 struct TreeNode* root = createNode(1); root->left = createNode(2); root->right = createNode(3); root->left->left = createNode(4); root->left->right = createNode(5); printf("前序遍历: "); preorder(root); printf("\n"); printf("中序遍历: "); inorder(root); printf("\n"); printf("后序遍历: "); postorder(root); printf("\n"); return 0;} 通过本教程,你已经掌握了C语言中二叉树遍历的三种核心方法:前序遍历、中序遍历和后序遍历。每种遍历方式都有其独特的应用场景,理解它们的执行顺序和递归逻辑是解决更复杂树问题的关键。
建议你动手编写代码并调试运行,加深对递归调用栈的理解。当你能熟练运用这三种遍历方式时,你就离掌握高级树结构(如AVL树、红黑树)又近了一步!
本文由主机测评网于2025-12-03发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://www.vpshk.cn/2025122167.html