1. 二叉树遍历的核心概念解析
二叉树作为数据结构中最基础的树形结构之一,在算法面试和实际工程中都有着广泛应用。理解其遍历方式,是掌握树形结构操作的第一步。遍历的本质是按照某种顺序访问树中的每个节点,确保每个节点被访问且仅被访问一次。
二叉树常见的四种遍历方式各有特点:
- 前序遍历(Preorder):根节点→左子树→右子树
- 中序遍历(Inorder):左子树→根节点→右子树
- 后序遍历(Postorder):左子树→右子树→根节点
- 层序遍历(Level order):从上到下、从左到右逐层访问
关键理解:前中后序的命名来源于根节点在遍历顺序中的位置。这种遍历方式属于深度优先搜索(DFS),而层序遍历则属于广度优先搜索(BFS)。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 递归实现深度优先遍历
递归实现是二叉树遍历最直观的表达方式,直接反映了遍历的定义。我们以如下二叉树结构为例:
cpp复制struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
};
2.1 前序遍历递归实现
cpp复制void preorderTraversal(TreeNode* root, vector<int>& result) {
if (!root) return;
result.push_back(root->val); // 访问根节点
preorderTraversal(root->left, result); // 遍历左子树
preorderTraversal(root->right, result); // 遍历右子树
}
递归三要素分析:
- 终止条件:节点为空时返回
- 当前层逻辑:访问根节点值
- 向下递归:分别处理左右子树
2.2 中序遍历递归实现
cpp复制void inorderTraversal(TreeNode* root, vector<int>& result) {
if (!root) return;
inorderTraversal(root->left, result); // 遍历左子树
result.push_back(root->val); // 访问根节点
inorderTraversal(root->right, result); // 遍历右子树
}
2.3 后序遍历递归实现
cpp复制void postorderTraversal(TreeNode* root, vector<int>& result) {
if (!root) return;
postorderTraversal(root->left, result); // 遍历左子树
postorderTraversal(root->right, result); // 遍历右子树
result.push_back(root->val);
