代码随想录算法训练营第十四天字符串 java :二叉树理论基础 144前序遍历 145后续遍历94 中序遍历

news2025/1/20 3:34:29

系列文章目录

第十一天笔记

文章目录

  • 系列文章目录
  • 前言
  • 1、二叉树理论基础
    • 1.1二叉树的种类
    • 1.1 如何区分二叉树的遍历方式
    • 1.2 如何定义二叉树节点
  • 2 递归遍历
        • 2.1**前序遍历 AC代码**
        • 2.2**后序遍历 AC代码**
        • 2.3 **中序遍历 AC代码**
  • 3 迭代法
  • 4 层次遍历
  • 总结
        • **什么是List<List < Integer >>**??


前言

1、二叉树理论基础

重点在于如何遍历二叉树 ,卡哥讲到要闭眼都能定义出二叉树

1.1二叉树的种类

  • 满二叉树
  • 完全二叉树
  • 平衡二叉树
  • 二叉搜索树

1.1 如何区分二叉树的遍历方式

前序遍历 中 左 右
中序遍历 左 中 右
后序遍历 左 右 中
在这里插入图片描述

1.2 如何定义二叉树节点

可以理解为是一个链表

public class TreeNode {
    int val; //定义值
    TreeNode left;
    TreeNode right;
    TreeNode()
    {

    }

    public TreeNode(int val) {
        this.val = val;
    }

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

2 递归遍历

思路就是:
1 确认递归函数的参数和返回值
2 确认终止条件
3 确认单层递归逻辑

2.1前序遍历 AC代码

/**
 * Definition for a binary tree node.
 * 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;
 *     }
 * }
 */
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);
    }
}

2.2后序遍历 AC代码

/**
 * Definition for a binary tree node.
 * 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;
 *     }
 * }
 */
class Solution {
    public List<Integer> postorderTraversal(TreeNode root) {
        List<Integer> res = new ArrayList<>();
        postorder(root,res);
        return res;  
    }
    public void postorder(TreeNode root,List<Integer> res)
    {
        if(root==null)
        {
            return;
        }
        postorder(root.left,res);
        postorder(root.right,res);
        res.add(root.val);
    }
}

2.3 中序遍历 AC代码

/**
 * Definition for a binary tree node.
 * 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;
 *     }
 * }
 */
class Solution {
    public List<Integer> inorderTraversal(TreeNode root) {
      List <Integer> res = new ArrayList<>();
        inorder(root,res);
        return res;
    }
    public void inorder(TreeNode root,List<Integer> res)
    {
        if( root== null)
        {
            return;
        }
        // 递归 中间 左 中 右
        inorder(root.left,res);
        res.add(root.val);
        inorder(root.right,res);
    }

   
}

3 迭代法

简单的递归可以用栈来模拟
在这里插入图片描述

4 层次遍历

层序遍历一个二叉树。就是从左到右一层一层的去遍历二叉树
需要一个辅助数据类型 队列

没听懂 懂了再补充

总结

什么是List<List < Integer >>??

首先List指的是存int类型数据的列表,List<List>指的是存【int类型数据的列表】类型数据的列表------有点“套娃”,大概意思就是这个母列表存子列表,其子列表存int类型的数据。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/155197.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

组态王软件与S7-1200无线MODBUS通信方案详解

本方案是组态软件与西门子 S7-1200进行无线 MODBUS 通信的实现方法。此方案可以作为西门子 S7-1200与组态软件的无线 MODBUS 通信实例。在本方案中采用了西门子PLC专用无线通讯终端DTD434MC&#xff0c;作为实现无线通讯的硬件设备。 一、方案概述 组态王配置为标准 MODBUS 主…

基础面试问题

在Java中获取当前的工作目录System.getProperty("user.dir")public class Test {public static void main(final String[] args) {final String dir System.getProperty("user.dir");System.out.println("current dir " dir);} }获取一定范围…

Redis01之Windows版本的Redis安装配置

目录 0. 学习网址 https://www.w3cschool.cn/redis/https://www.w3cschool.cn/redis/ 1. Redis简介 2. 下载 3. 安装和配置 3.1 window(略...) 3.2 linux(CentOS) 4. Redis支持五种数据类型 5.通过命令操作redis 0. 学习网址 https://www.w3cschool.cn/redis/http…

一文搞懂CPU如何控制I/O设备

1 接口和设备&#xff1a;经典适配器模式 输入输出设备不只是一个设备。大部分输入输出设备&#xff0c;都有&#xff1a; 它的接口&#xff08;Interface&#xff09;实际的I/O设备&#xff08;Actual I/O Device&#xff09; 硬件设备并非直接接入到总线上和CPU通信&#…

UOS 录制电脑播放的音频 / 内录音频

Windows 里面有一个“立体声混音”&#xff0c;可以内录电脑播放的音频&#xff0c;而不受到外界噪音的干扰。前段时间接到反馈说 UOS 的设置里面的音频输入里面没有可以选择的设备&#xff0c;这里就稍微探索了一下&#xff0c;发现 UOS 也是可以配置内录的。这里参考了一下这…

网络基础(一)

网络基础&#xff08;一&#xff09;计算机网络背景网络发展独立模式: &#xff08;计算机之间相互独立&#xff09;网络互联: ( 多台计算机连接在一起, 完成数据共享)局域网LAN: (计算机数量更多了, 通过交换机和路由器连接在一起);广域网WAN: &#xff08;将远隔千里的计算机…

vue入门到精通(一)

一、vue简介 Vue是一款用于构建用户界面的 JavaScript 框架。 它基于标准 HTML、CSS 和 JavaScript 构建&#xff0c;并提供了一套声明式的、组件化的编程模型&#xff0c;帮助你高效地开发用户界面。 无论是简单还是复杂的界面&#xff0c;Vue 都可以胜任。 二、vue3选项式…

Linux编译器-gcc/g++使用

目录 1. 背景知识 2. gcc如何完成 2.1 预处理(进行宏替换) 2.2 编译&#xff08;生成汇编&#xff09; 2.3 汇编&#xff08;生成机器可识别代码&#xff09; 2.4 链接&#xff08;生成可执行文件或库文件&#xff09; 3 函数库 3.1 分类 3.2 图解 4 gcc选项 1. 背景知…

开源工具系列2:Trivy

在云原生安全的场景中&#xff0c;一个常见的场景就是对漏洞和配置进行扫描&#xff0c;以发现整个 K8s 环境的安全问题。今天我们来介绍一个高效的扫描工具Trivy。 Trivy 是什么 Trivy&#xff08;tri 发音为 trigger&#xff0c;vy 发音为 envy&#xff09;是一个简单而全面…

QT 学习笔记(十七)

文章目录一、多线程简介1. 基础知识2. 多线程的优缺点及注意事项二、多线程详解1. 背景案例2. 通过多线程对背景案例进行优化3. 方法一&#xff1a;多线程的创建使用&#xff08;QT 4.7 以前&#xff09;3.1 方法一的创建步骤3.2 方法一的具体实现及实现代码4. 方法二&#xff…

Android Hook之Frida安装使用

目录Frida安装安装frida-serverfrida-server配置和启动Frida Hook实例1&#xff1a;实例2&#xff1a;Frida 常用命令Frida 是一个动态检测框架&#xff0c;允许开发人员在 Windows、macOS、Linux、iOS 和 Android 上的原生应用程序中注入 JavaScript 或 Python 脚本。该框架可…

Spring复习(二)

FactoryBean FactoryBean是一个接口&#xff0c;需要创建一个类实现该接口 package com.mao.pojo;import org.springframework.beans.factory.FactoryBean;public class StudentFactoryBean implements FactoryBean {//getObject方法将对象交给Spring容器来管理Overridepubli…

Go web开发

使用 Gin-Plus 框架快速进行 web 开发 一、前言 安装 Get go get github.com/archine/gin-plus/v2v2.0.0Mod # go.mod文件加入下面的一条 github.com/archine/gin-plus/v2 v2.0.0# 命令行在该项目目录下执行 go mod tidy二、项目使用 1、启动入口 定义 main 文件&#xf…

来自一位双非本科大二学生的?自我救赎:堕落——蜕变

回望2022&#xff1a;获得&#xff1f;&#xff1a;失去&#xff1b;开心&#xff1f;&#xff1a;难过&#xff1b;伤心&#xff1f;&#xff1a;释怀 先提一句&#xff0c;总结2022&#xff0c;有后悔、不甘&#xff1b;有开心、感动&#xff1b;2022结束&#xff0c;更多的是…

springboot 2.6.6读不到nacos上的配置文件

搭建了一个微服务项目 spring boot 版本&#xff1a;2.6.6 spring cloud 版本&#xff1a;2021.0.1 spring cloud alibaba 版本&#xff1a;2021.0.1.0 遇到的问题无论是在application.yml还是在bootstrap.properties属性文件里配置服务中心相关的的信息都不能读取nacos上的…

LeetCode[215]数组中的第K个最大元素

难度&#xff1a;中等题目&#xff1a;给定整数数组 nums和整数 k&#xff0c;请返回数组中第 k个最大的元素。请注意&#xff0c;你需要找的是数组排序后的第 k个最大的元素&#xff0c;而不是第 k个不同的元素。你必须设计并实现时间复杂度为 O(n)的算法解决此问题。示例 1:输…

2.5(完结)C语言重点解剖内存管理函数要点速记

1.指针如果有具体的指向&#xff0c;包括野指针&#xff0c;对应的合法性&#xff0c;我们是无法验证的。 2.所有的指针如果没有被直接使用&#xff0c;必须设置为NULL。 3.在函数内部&#xff0c;要验证指针的合法性&#xff0c;本质上是验证指针!NULL。 4.自定义函数传入指…

Odoo 16 企业版手册 - 库存管理之到岸成本

到岸成本 到岸成本可以定义为买方在购买时应支付的产品总价。这包括运输、关税、手续费、服务费、运费等。为了获得产品的销售价格&#xff0c;这些额外费用被添加到产品的实际成本中。根据公司政策&#xff0c;不同公司的到岸成本计算方法将有所不同。在Odoo 库存模块中&#…

JAVA中的for循环使用方法

一. 循环结构1. 概念在学习Java里的循环之前&#xff0c;我们先来了解一下到底什么是循环&#xff0c;以及循环的作用。我们先来看下面这张图&#xff1a;大家想一下&#xff0c;我们在400米的跑道上参加万米长跑&#xff0c;正常情况下要跑25圈&#xff0c;这25圈每一圈的跑步…

FPGA:逻辑运算及逻辑门

文章目录逻辑变量与逻辑函数逻辑运算基本逻辑运算及对应的逻辑门&#xff11;.与运算与逻辑举例状态表与真值表与逻辑符号与逻辑表达式与门电路&#xff12;. 或运算或逻辑举例电路状态表状态表与真值表或逻辑符号或逻辑表达式或门电路3. 非运算非逻辑举例电路状态表状态表与真…