力扣第145题-二叉树的后序遍历

90 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第12天,点击查看活动详情

前言

力扣第145题 二叉树的后序遍历 如下所示:

给你一棵二叉树的根节点 root ,返回其节点值的 后序遍历

示例 1:

输入: root = [1,null,2,3]
输出: [3,2,1]

一、思路

这一题与前面一题力扣第144题-二叉树的前序遍历非常相似,我们只需要按照后序遍历的顺序来收集二叉树中的各个节点值

首先需要了解什么是 前中后序遍历?这里的 前中后 指的是 根节点 对于 左孩子右孩子 的相对位置,有如下的关系:

  • 前序遍历:根左右
  • 中序遍历:左根右
  • 后序遍历:左右根

经过上面的分析,我们可以直到如下二叉树的后序遍历顺序为:

先左节点 2,再右节点 3,最后根节点 3

image.png

举个例子

这里以如下的二叉树作为例子,以分步骤的形式讲解收集节点值的具体过程

image.png

绿色表示当前选择的节点

  1. 选择左孩子 2

image.png

  1. 选择右孩子 3 的左孩子 4

image.png

  1. 选择右孩子 3 的右孩子 5

image.png

  1. 选择右孩子 3

image.png

  1. 最后选择根节点 1

image.png

  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);
}

结果

image.png

三、总结

感谢看到最后,非常荣幸能够帮助到你~♥

如果你觉得我写的还不错的话,不妨给我点个赞吧!如有疑问,也可评论区见~