二叉树遍历方式代码解读(1递归)

遍历方式

先序遍历:根 → 左 → 右

中序遍历:左 → 根 → 右

后序遍历:左 → 右 → 根

下面我将分别用递归的方法进行代码的讲解:

先构造一棵小树,用小树的例子进行讲解

1.先序遍历:

复制代码
public void preOrder(TreeNode root) {

if (root == null) return;

System.out.print(root.val + " "); // 根

preOrder(root.left); // 左

preOrder(root.right); // 右

}

过程:

1.调用 preOrder(1)

不为空,打印:

递归左孩子:preOrder(2)

2.调用 preOrder(2)

不为空,打印:2

递归左孩子:preOrder(4)

3.调用 preOrder(4)

不为空,打印:4

递归左孩子:preOrder(null) → 直接返回

递归右孩子:preOrder(null) → 直接返回

函数结束,回到上一层(节点 2)

回到 preOrder(2)

4.左子树走完了,现在递归右孩子:preOrder(null) → 返回

函数结束,回到上一层(节点 1)

回到 preOrder(1)

5.左子树走完了,递归右孩子:preOrder(3)

6.调用 preOrder(3)

不为空,打印:3

左、右都是 null,直接返回

回到节点 1,整个遍历结束

先序结果:1 2 4 3

2.中序遍历:

复制代码
public void inOrder(TreeNode root) {

if (root == null) return;

inOrder(root.left); // 左

System.out.print(root.val + " "); // 根

inOrder(root.right); // 右

}
复制代码
过程:

1.inOrder(1)

先递归左:inOrder(2)

2.inOrder(2)

先递归左:inOrder(4)

3.inOrder(4)

递归左:inOrder(null) 返回

打印:4

递归右:inOrder(null) 返回

回到节点 2

4.回到 inOrder(2)

左走完,打印:2

递归右:inOrder(null) 返回

回到节点 1

5.回到 inOrder(1)

左走完,打印:1

6.递归右:inOrder(3)

inOrder(3)

递归左:null

打印:3

递归右:null

结束

中序结果:4 2 1 3

3.后序遍历:

复制代码
public void postOrder(TreeNode root) {

if (root == null) return;

postOrder(root.left); // 左

postOrder(root.right); // 右

System.out.print(root.val + " "); // 根

}

过程:

1.postOrder(1) → 先走左 postOrder(2)

2.postOrder(2) → 先走左 postOrder(4)

3.postOrder(4)

左:null

右:null

打印:4

返回节点 2

4.回到 postOrder(2)

左走完,走右:null

打印:2

返回节点 1

5.回到 postOrder(1)

左走完,走右 postOrder(3)

6.postOrder(3)

左、右都 null

打印:3

返回节点 1

7.回到 postOrder(1)

左右都走完

打印:1

后序结果:4 2 3 1

相关推荐
半旧夜夏4 分钟前
【保姆级】微服务组件环境搭建(Docker Compose版)
java·linux·spring cloud·微服务·云原生·容器
云烟成雨TD1 小时前
Spring AI 1.x 系列【33】RAG Advisor 组件与四大分层架构
java·人工智能·spring
用户987409238871 小时前
llamafactory 0.6.3 没有 llamafactory-cli
算法
计算机安禾1 小时前
【算法分析与设计】第26篇:参数化算法与固定参数可解性理论
大数据·人工智能·算法·机器学习·剪枝
江南十四行2 小时前
并发编程(七)
java
AI科技星2 小时前
基于**v=c(空间光速螺旋运动)唯一第一性原理**重新完整求导证明
人工智能·线性代数·算法·机器学习·架构·概率论·学习方法
亦暖筑序2 小时前
单模型成本高、风险大?Spring AI多模型路由实战:成本降70%,可用性更稳
java·后端·ai编程
404号扳手2 小时前
Java 进阶知识(二)
java·后端
风筝在晴天搁浅2 小时前
美团 LeetCode 692.前K个高频单词
算法·leetcode·职场和发展
地平线开发者3 小时前
量化训练时 fusebn/withbn 简介
算法·自动驾驶