链式二叉树递归实现与遍历详解
递归是程序员的必修课,而链式二叉树正是理解递归思维的绝佳范例。通过实现遍历、统计节点、计算深度等操作,我们能真正掌握如何将复杂问题分解为相似子问题的技巧。
一、链式二叉树结构
1.1 概念
链式结构使用链表来表示二叉树,每个节点通常包含三个域:数据域、左指针域和右指针域。左右指针分别指向该节点的左孩子和右孩子。

1.2 基本结构(递归性)
链式二叉树的节点由三部分构成:存储数据的变量、指向左孩子的指针、指向右孩子的指针。
// 定义链式二叉树的结构--节点结构
typedef int BTDataType;
typedef struct BinaryTreeNode {
BTDataType data; // 存储数据
struct BinaryTreeNode* left; // 指针指向左孩子节点(左子树)
struct BinaryTreeNode* right; // 指针指向右孩子节点(右子树)
} BTNode;
观察这个结构,递归性质显而易见:一个二叉树由根节点、左子树(本身也是二叉树)、右子树(本身也是二叉树)组成。这种'自相似'的定义正是递归的基础。
二、遍历接口实现
链式二叉树的结构决定了其操作算法通常是递归的。处理整棵树和处理它的子树,逻辑是一致的。
| 遍历方式 | 描述 | 简记 |
|---|---|---|
| 前序遍历 | 先访问当前节点,再递归遍历左子树,最后递归遍历右子树 | 根 -> 左 -> 右 |
| 中序遍历 | 先递归遍历左子树,再访问当前节点,最后递归遍历右子树 | 左 -> 根 -> 右 |
| 后序遍历 | 先递归遍历左子树,再递归遍历右子树,最后访问当前节点 | 左 -> 右 -> 根 |
| 层序遍历 | 按树的深度,从根节点开始,一层一层地依次访问节点 | 从上到下,从左到右 |
2.1 前序遍历(根左右)
前序遍历规则很简单:先打印根节点,再递归处理左子树,最后递归处理右子树。
代码实现:
// Tree.c
{
(root == ) {
();
;
}
(, root->data);
PreOrder(root->left);
PreOrder(root->right);
}


