二叉树前序、中序、后序遍历本质是根节点访问时机不同:前序为根→左→右,适合复制树;中序为左→根→右,BST中输出升序;后序为左→右→根,适合释放内存;均可用递归或栈实现,空节点判别须前置。

二叉树的前序、中序、后序遍历本质是访问节点的顺序不同,核心都依赖递归(或栈模拟递归)来保证“左子树→右子树→根”等结构约束。只要明确每种遍历中“根节点”的访问时机,实现就非常直接。
前序遍历:根 → 左 → 右
先处理当前节点,再递归遍历左子树,最后递归遍历右子树。适合用于复制树、序列化等需要优先获取根信息的场景。
- 若当前节点为空,直接返回
- 否则:先访问(如打印或存入列表),再递归前序遍历左子树,再递归前序遍历右子树
中序遍历:左 → 根 → 右
对二叉搜索树(BST)而言,中序遍历天然输出升序序列。关键在于必须严格按“左-根-右”顺序执行。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 若当前节点为空,直接返回
- 否则:先递归中序遍历左子树,再访问当前节点,最后递归中序遍历右子树
后序遍历:左 → 右 → 根
常用于释放树内存、计算子树大小或判断平衡性——因为必须等左右子树都处理完,才能处理当前节点。
- 若当前节点为空,直接返回
- 否则:先递归后序遍历左子树,再递归后序遍历右子树,最后访问当前节点
非递归实现(用栈)
递归本质是系统栈,手动用栈可避免递归调用开销或栈溢出风险。三种遍历的非递归写法略有差异:
- 前序:栈中压入右子节点再压左子节点,每次弹出即访问
- 中序:一路向左压栈到底,弹出时访问,再转向右子树继续
- 后序:较复杂,常用双栈法或标记法(如每个节点配一个“是否已访问过子树”的标志)

















