LeetCode每日1题--二叉树前序遍历

71 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第24天,点击查看活动详情

前言

算法的重要性不言而喻!区分度高!

现在学习的门槛低了,只有能上网每个人都可以学编程!培训班6个月就可以培养出来能干活的人,你怎么从这些人中脱颖而出?没错!就是学算法,学一些底层和基础的东西。

说的功利点是为了竞争,卷死对手。真心话说就是能提高自己的基础能力,为技术可持续发展做好充分的准备!!!

提前入门学习书籍:CPrimerPlus、大话数据结构

image-20220705103735001

刷题网站

代码随想录 (programmercarl.com)

leetcode

我是按照代码随想录提供的刷题顺序进行刷题的,大家也可以去刷leetcode最热200道,都可以

刷题嘛,最重要的就是坚持了!!!

画图软件

OneNote

这个要经常用,遇见不懂的流程的话就拿它画一画!

笔记软件

Typoral

题目

image.png

解析

遍历三部曲

后面会经常用到二叉树的遍历,所以对遍历的规则要很清楚,那么是哪些遍历呢?前序、中序、后序遍历

对于这些遍历,怎么用代码实现呢?递归!

接下来我们就写一下递归遍历的三部曲:

  1. 确定递归函数的参数和返回值
  2. 终止条件
  3. 确定单层递归的逻辑

以上,除了熟记于心。还有就是加上不断的练习即可掌握,二叉树这个章节可是有30多道题等着你呢,你肯定能会写递归。

什么是前序遍历呢?

如下图二叉树,前序遍历的顺序如下

前序遍历就是先遍历中间节点,之后在左节点和右节点

image.png

二叉树的定义

平时练题应该是不需要写的,但是如果面试可没有给你定义好,所以掌握二叉树的定义也是很有必要的!

public class TreeNode {
        int val;
        TreeNode left;
        TreeNode right;
        TreeNode() {}
        TreeNode(int val) { this.val = val; }
        TreeNode(int val, TreeNode left, TreeNode right) {
                this.val = val;
                this.left = left;
                this.right = right;
        }
}

递归第一步:确定递归的参数和返回值

参数是一个根节点,一个list集合(用来存放结果)

public void preorder(TreeNode root, List<Integer> result) {

确定终止条件

什么时候遍历停下来了呢?

那就是当前遍历的节点为空,那就终止遍历

确定单层递归的逻辑

前序遍历当然是这样了

result.add(root.val);
preorder(root.left, result);
preorder(root.right, result);

完整代码如下:

class Solution {
    public List<Integer> preorderTraversal(TreeNode root) {
        List<Integer> result = new ArrayList<Integer>();
        preorder(root, result);
        return result;
    }

    public void preorder(TreeNode root, List<Integer> result) {
        if (root == null) {
            return;
        }
        result.add(root.val);
        preorder(root.left, result);
        preorder(root.right, result);
    }
}

leetcode测试

image.png