力扣第144题-二叉树的前序遍历

77 阅读2分钟

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

前言

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

给你二叉树的根节点 root ,返回它节点值的 前序 遍历。

示例 1:

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

一、思路

题目非常的简短,要求我们使用 前序遍历的方式来获取各节点的值,并将值按顺序存入列表中。首先需要了解 前序遍历 的含义。

前序遍历 是指:根节点左右孩子 中的位置,前序 是指先遍历 根节点,即遍历的顺序为根左右,如下图所示:

image.png

既然确定了遍历的顺序,那这一题很容易就能想到使用 递归 来解决。大致的步骤如下所示:

  1. 遍历根节点,并收集根节点的值
  2. 继续遍历根节点的左孩子,并收集当前节点的值
  3. 最后遍历根节点的右孩子,并收集当前节点的值

举个例子

此处以如下的二叉树作为例子:

image.png

绿色:标识当前正在遍历的节点

  1. 遍历根节点 1

image.png

  1. 遍历左孩子 2

image.png

  1. 遍历右孩子 3

image.png

  1. 遍历右孩子的左孩子 4

image.png

  1. 最终返回结果:[1, 2, 3, 4] 即可

二、实现

实现代码

实现代码很简短,这是一个大多数递归的模板代码。

List<Integer> ret = new ArrayList<>();

public List<Integer> preorderTraversal(TreeNode root) {
    dfs(root);
    return ret;
}

public void dfs(TreeNode node){
    if (node == null)
        return;
    ret.add(node.val);
    dfs(node.left);
    dfs(node.right);
}

测试代码

public static void main(String[] args) {
    TreeNode treeNode = new TreeNode(1, new TreeNode(2), new TreeNode(3));
    new Number144().preorderTraversal(treeNode);
}

结果

image.png

三、总结

这一题可以说是非常经典的递归问题了,第一次遇到还是在大学中的数据结构课程上面。现在碰到这种简单题目,已经可以轻松实现了,hhhh~

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

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