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

简介: LeetCode每日1题--二叉树后序遍历

前言


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

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

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

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

image.png


刷题网站


代码随想录 (programmercarl.com)

leetcode

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

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


画图软件


OneNote

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


笔记软件


Typoral


题目


image.png


解析


遍历三部曲

还是熟悉的递归三部曲,每次遍历我们都要用到它,我们再写一遍

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

什么是后序遍历呢?

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

后序遍历就是先遍历左节点,然后右节点最后是中间节点

如图所示:

image.png

二叉树的定义

再来回顾一下二叉树的定义

二叉树的定义一直是这样的,我们要写熟练了

还是因为面试的时候你要自己模拟二叉树,在leetcode里是直接二叉树就存在的所以我们不需要去模拟

现实我们还是要好好写的,这次我们一下就写了3遍,冲!!!!!!

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

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


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

确定终止条件

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

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

if (root == null) {
                return;
            }

确定单层递归的逻辑

后续遍历当然是这样了

和前面两个遍历也是一样,就是更改遍历的顺序!

不懂的话还是和以前一样,画图就行!

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

完整代码如下:

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;
        }
        preorder(root.left, result);
        preorder(root.right, result);
        result.add(root.val);
    }
}

leetcode测试

image.png

总结

二叉树最常见的三种遍历方式我们都了解了,其实很相似但我们还是要多练才能给掌握,后面虽然还是这些但是经过变形之后就会难理解一点。现在我们能做的就是加深对这些遍历方式的理解。



相关文章
|
1月前
【LeetCode 31】104.二叉树的最大深度
【LeetCode 31】104.二叉树的最大深度
19 2
|
1月前
【LeetCode 29】226.反转二叉树
【LeetCode 29】226.反转二叉树
15 2
|
1月前
【LeetCode 43】236.二叉树的最近公共祖先
【LeetCode 43】236.二叉树的最近公共祖先
18 0
|
1月前
【LeetCode 38】617.合并二叉树
【LeetCode 38】617.合并二叉树
14 0
|
1月前
【LeetCode 37】106.从中序与后序遍历构造二叉树
【LeetCode 37】106.从中序与后序遍历构造二叉树
16 0
|
1月前
【LeetCode 34】257.二叉树的所有路径
【LeetCode 34】257.二叉树的所有路径
12 0
|
1月前
【LeetCode 32】111.二叉树的最小深度
【LeetCode 32】111.二叉树的最小深度
16 0
|
2月前
|
Unix Shell Linux
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
本文提供了几个Linux shell脚本编程问题的解决方案,包括转置文件内容、统计词频、验证有效电话号码和提取文件的第十行,每个问题都给出了至少一种实现方法。
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
|
3月前
|
Python
【Leetcode刷题Python】剑指 Offer 32 - III. 从上到下打印二叉树 III
本文介绍了两种Python实现方法,用于按照之字形顺序打印二叉树的层次遍历结果,实现了在奇数层正序、偶数层反序打印节点的功能。
55 6
|
3月前
|
搜索推荐 索引 Python
【Leetcode刷题Python】牛客. 数组中未出现的最小正整数
本文介绍了牛客网题目"数组中未出现的最小正整数"的解法,提供了一种满足O(n)时间复杂度和O(1)空间复杂度要求的原地排序算法,并给出了Python实现代码。
113 2