一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第12天,点击查看活动详情。
前言
力扣第145题 二叉树的后序遍历
如下所示:
给你一棵二叉树的根节点 root
,返回其节点值的 后序遍历 。
示例 1:
输入: root = [1,null,2,3]
输出: [3,2,1]
一、思路
这一题与前面一题力扣第144题-二叉树的前序遍历非常相似,我们只需要按照后序遍历的顺序来收集二叉树中的各个节点值
首先需要了解什么是 前中后序遍历
?这里的 前中后
指的是 根节点
对于 左孩子
和 右孩子
的相对位置,有如下的关系:
- 前序遍历:根左右
- 中序遍历:左根右
- 后序遍历:左右根
经过上面的分析,我们可以直到如下二叉树的后序遍历顺序为:
先左节点
2
,再右节点3
,最后根节点3
举个例子
这里以如下的二叉树作为例子,以分步骤的形式讲解收集节点值的具体过程
绿色表示当前选择的节点
- 选择左孩子
2
- 选择右孩子
3
的左孩子4
- 选择右孩子
3
的右孩子5
- 选择右孩子
3
- 最后选择根节点
1
- 最终返回的结果为
[2, 4, 5, 3, 1]
综上所述,上述的这一遍历过程,我们很容易就可以想到使用 递归
来实现。
二、实现
实现代码
实现代码与思路中保持一致
List<Integer> ret = new ArrayList<>();
public List<Integer> postorderTraversal(TreeNode root) {
dfs(root);
return ret;
}
public void dfs(TreeNode node){
if (node == null)
return;
dfs(node.left);
dfs(node.right);
ret.add(node.val);
}
测试代码
public static void main(String[] args) {
TreeNode node = new TreeNode(1, new TreeNode(2), new TreeNode(3, new TreeNode(4), new TreeNode(5)));
new Number145().postorderTraversal(node);
}
结果
三、总结
感谢看到最后,非常荣幸能够帮助到你~♥
如果你觉得我写的还不错的话,不妨给我点个赞吧!如有疑问,也可评论区见~