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

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

前言


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

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

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

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

image.png


刷题网站


代码随想录 (programmercarl.com)

leetcode

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

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


画图软件


OneNote

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


笔记软件


Typoral


题目


image.png


解析


遍历三部曲

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

  1. 确定递归函数的参数和返回值
  2. 确定终止条件
  3. 确定单层递归的逻辑 没错,又是它们三个,但凡涉及到遍历的,都离不开这三步。

什么是中序遍历呢?

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

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

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) {

确定终止条件

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

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

确定单层递归的逻辑

中序遍历当然是这样了,其实就是和前序遍历的顺序翻一翻即可


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

leetcode测试

我们在测试的时候,最好是在leetcode里写,因为如果有面试的时候也是手写,那也是没有代码提示的,相当与自己从0开始写的,所以我们在平常的练习中也要这样写练习

image.png



相关文章
【LeetCode】105. 从前序与中序遍历序列构造二叉树
题目描述: 给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的先序遍历, inorder 是同一棵树的中序遍历,请构造二叉树并返回其根节点。 示例:
61 0
|
6月前
|
Go
golang力扣leetcode 105.从前序与中序遍历序列构造二叉树
golang力扣leetcode 105.从前序与中序遍历序列构造二叉树
59 0
|
5月前
|
存储 SQL 算法
LeetCode 题目 94:五种算法递归|迭代|莫里斯|线索二叉树|栈的迭代二叉树 实现中序遍历
LeetCode 题目 94:五种算法递归|迭代|莫里斯|线索二叉树|栈的迭代二叉树 实现中序遍历
|
6月前
【力扣刷题】二叉树的中序遍历、二叉树的最大深度、翻转二叉树、对称二叉树
【力扣刷题】二叉树的中序遍历、二叉树的最大深度、翻转二叉树、对称二叉树
38 0
|
12月前
|
算法
【LeetCode题目详解】(五)144.二叉树的前序遍历、94.二叉树的中序遍历、145.二叉树的后序遍历、104.二叉树的最大深度、110.平衡二叉树
【LeetCode题目详解】(五)144.二叉树的前序遍历、94.二叉树的中序遍历、145.二叉树的后序遍历、104.二叉树的最大深度、110.平衡二叉树
51 0
|
6月前
leetcode代码记录(对称二叉树 中序遍历+回文串 为什么不行
leetcode代码记录(对称二叉树 中序遍历+回文串 为什么不行
24 0
|
6月前
|
Java
105. 从前序与中序遍历序列构造二叉树 --力扣 --JAVA
给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的先序遍历, inorder 是同一棵树的中序遍历,请构造二叉树并返回其根节点。
59 1
|
6月前
|
Go
golang力扣leetcode 94.二叉树的中序遍历
golang力扣leetcode 94.二叉树的中序遍历
40 0
|
6月前
力扣94. 二叉树的中序遍历
力扣94. 二叉树的中序遍历
42 0