链式二叉树详解:递归遍历与核心接口实现
一、链式二叉树结构
1.1 概念
链式结构使用链表来表示二叉树,每个节点包含数据域和左右指针域。左右指针分别指向该节点的左孩子和右孩子所在的地址。

1.2 基本结构(结构上的递归性)
链式二叉树的节点由三部分构成:存储数据的变量、指向左孩子节点的指针、指向右孩子节点的指针。这种结构定义是'自相似的',一个二叉树由根节点、左子树(本身也是二叉树)、右子树(本身也是二叉树)组成。
// 定义链式二叉树的结构--节点结构
typedef int BTDataType;
typedef struct BinaryTreeNode {
BTDataType data; // 存储数据
struct BinaryTreeNode* left; // 指针指向左孩子节点(左子树)
struct BinaryTreeNode* right; // 指针指向右孩子节点(右子树)
} BTNode;
这种结构天然契合递归的定义:将问题逐步分解为与原始问题相似的更小规模的子问题,直到转化为最简单的子问题。
二、遍历接口实现(操作上的递归性)
链式二叉树的结构是递归的,对树进行的大多数操作算法也必然是递归的。处理整个二叉树和处理它的子树,结构都是相似的,导致使用的是完全相同的方法。
| 二叉树遍历接口 | 描述 | 行为简记 |
|---|---|---|
| 前序遍历 | 先访问当前节点,然后递归遍历左子树,最后递归遍历右子树 | 根 -> 左 -> 右 |
| 中序遍历 | 先递归遍历左子树,然后访问当前节点,最后递归遍历右子树 | 左 -> 根 -> 右 |
| 后序遍历 | 先递归遍历左子树,然后递归遍历右子树,最后访问当前节点 | 左 -> 右 -> 根 |
| 层序遍历 | 按树的深度,从根节点开始,一层一层地依次访问节点 | 从上到下,从左到右 |
2.1 前序遍历(根左右)
前序遍历规则为:先遍历根节点,再遍历左子树,最后遍历右子树。简记为'根左右'。
思路解析:首先判断根节点是否为空,为空直接结束;不为空则打印根节点数据。接着对左子树进行前序遍历(递归调用),完成后对右子树进行前序遍历(再次递归调用)。


