力扣之每日四题day01--二叉树遍历篇

二叉树遍历

    • 144.二叉树的前序遍历
    • 145.二叉树的后序遍历
    • 94.二叉树的中序遍历
    • 102.二叉树的层序遍历

144.二叉树的前序遍历

力扣地址

import java.util.ArrayList;
import java.util.List;/*** 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>res=new ArrayList<>();//调用递归的前序遍历方法preorderTraversal(root,res);return res;}//递归方法用于前序遍历public void preorderTraversal(TreeNode root, List<Integer>res){//基本情况,如果当前节点为空,返回if(root==null){return;}//将当前节点的值加入到结果列表res.add(root.val);//递归调用左子树preorderTraversal(root.left,res);//递归调用右子树preorderTraversal(root.right,res);}
}

二叉树的前序遍历是一种深度优先遍历(DFS)的方法,它按照“根节点 -> 左子树 -> 右子树”的顺序遍历二叉树的节点。具体实现思路如下:

  • 基本情况:首先处理基本情况,即当前节点为空时直接返回,表示到达了二叉树的叶子节点或空节点。
  • 处理当前节点:对于非空节点,将当前节点的值添加到结果列表中,表示对当前节点的访问。
  • 递归遍历左子树:然后递归调用前序遍历方法,传入当前节点的左子树作为新的根节点,继续遍历左子树的节点。
  • 递归遍历右子树:最后递归调用前序遍历方法,传入当前节点的右子树作为新的根节点,继续遍历右子树的节点。

145.二叉树的后序遍历

力扣地址

import java.util.ArrayList;
import java.util.List;/*** 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<Integer>();//递归调用方法postorderTraversal(root,res);//返回遍历的结果return res;}//定义递归方法,实现二叉树的后序遍历public void postorderTraversal(TreeNode root,List<Integer>res){//如果当前节点返回为空if(root==null){return;}//遍历左子树postorderTraversal(root.left,res);//遍历右子树postorderTraversal(root.right,res);//将当前节点的值添加到遍历结果列表res.add(root.val);}
}

二叉树的后序遍历是一种深度优先遍历(DFS)的方法,它按照“左子树 -> 右子树 -> 根节点”的顺序遍历二叉树的节点。具体实现思路如下:

  • 基本情况:首先处理基本情况,即当前节点为空时直接返回,表示到达了二叉树的叶子节点或空节点。
  • 递归遍历左子树:然后递归调用后序遍历方法,传入当前节点的左子树作为新的根节点,继续遍历左子树的节点。
  • 递归遍历右子树:接着递归调用后序遍历方法,传入当前节点的右子树作为新的根节点,继续遍历右子树的节点。
  • 处理当前节点:最后,将当前节点的值添加到结果列表中,表示对当前节点的访问。

94.二叉树的中序遍历

import java.util.ArrayList;
import java.util.List;/*** 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列表中res.add(root.val);//遍历右子树inorder(root.right, res);}}

二叉树的中序遍历是一种深度优先遍历(DFS)的方法,它按照“左子树 -> 根节点 -> 右子树”的顺序遍历二叉树的节点。具体实现思路如下

  • 基本情况:首先处理基本情况,即当前节点为空时直接返回,表示到达了二叉树的叶子节点或空节点。
  • 递归遍历左子树:然后递归调用中序遍历方法,传入当前节点的左子树作为新的根节点,继续遍历左子树的节点。
  • 处理当前节点:接着将当前节点的值添加到结果列表中,表示对当前节点的访问。
  • 递归遍历右子树:最后递归调用中序遍历方法,传入当前节点的右子树作为新的根节点,继续遍历右子树的节点。

102.二叉树的层序遍历

力扣地址

import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.List;
import java.util.Queue;/*** 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<List<Integer>> levelOrder(TreeNode root) {//存储最终的结果列表List<List<Integer>>res=new ArrayList<>();//用队列进行层序遍历Queue<TreeNode>queue=new ArrayDeque<>();//如果根节点不为空,将根节点加入队列if(root!=null){queue.add(root);}//循环遍历每一层的节点while(!queue.isEmpty()){//获取当前层的节点的个数int n=queue.size();//用于存储当前层节点的值List<Integer>level=new ArrayList<>();//遍历当前的节点for(int i=0;i<n;i++){//出队列,获取当前的节点TreeNode node=queue.poll();//将当前节点加入当前层的列表level.add(node.val);//将当前节点的左孩子加入队列if(node.left!=null){queue.add(node.left);}//将当前节点的右孩子加入队列if(node.right!=null){queue.add(node.right);}}//将当前层的列表加入最终结果列表res.add(level);}//返回最终结果列表return res;}
}

二叉树的层序遍历是一种广度优先遍历(BFS)的方法,它按照层级顺序逐层遍历二叉树的节点。具体思路如下

  • 创建数据结构:首先定义一个队列 queue 用于存储待遍历的节点,以及一个结果列表 res 用于存储每一层的节点值。
  • 初始化:如果根节点不为空,则将根节点加入队列。
  • 层序遍历:使用循环遍历每一层的节点,直到队列为空。在循环中
  • 获取当前层的节点个数 n,这个值等于当前队列的大小,表示当前层的节点数。
  • 创建一个列表 level 用于存储当前层的节点值。
  • 遍历当前层的节点,从队列中依次取出节点,将节点值加入 level 列表中,然后将节点的左右子节点(如果存在)加入队列。
  • 将存储当前层节点值的 level 列表加入结果列表 res 中。

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

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

相关文章

Vue基础配置、组件通信、自定义指令

基础配置 Vue框架已经集成了webpack配置 小注意点 vbase 快速生成vue模板 组件名必须是多词格式(驼峰模式) 具体三种写法: ①小驼峰:abcDef.vue ②大驼峰&#xff1a;AbcDef.vue ③中横线&#xff1a;abc-def.vue 假如文件名不符合多次格式的补救办法&#xff1a; 导出重命名…

EFPN代码解读

论文 Extended Feature Pyramid Network for Small Object Detection python3 D:/Project/EFPN-detectron2-master/tools/train_net.py --config-file configs/InstanceSegmentation/pointrend_rcnn_R_50_FPN_1x_coco.yaml --num-gpus 1 训练脚本 cfg 中的配置 先获取配置…

基于51单片机的智能门禁系统仿真设计

**单片机设计介绍&#xff0c;基于51单片机的智能门禁系统仿真设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于51单片机的智能门禁系统仿真设计概要 一、设计概述 本设计旨在利用51单片机为核心控制器&#xff0c;结合…

Python程序设计 多重循环(二)

1.打印数字图形 输入n&#xff08;n<9)&#xff0c;输出由数字组成的直角三角图形。例如&#xff0c;输入5&#xff0c;输出图形如下 nint(input("")) #开始 for i in range(1,n1):for j in range(1,i1):print(j,end"")print()#结束 2.打印字符图形 …

pytest教程-22-用例依赖插件-pytest-dependency

领取资料&#xff0c;咨询答疑&#xff0c;请➕wei: June__Go 上一小节我们学习了pytest失败重跑插件pytest-rerunfailures&#xff0c;本小节我们讲解一下pytest用例依赖插件-pytest-dependency。 用例依赖 编写用例的时候&#xff0c;我们会注意用例之间的独立性&#xf…

【电源专题】电池不均衡的影响与原因

在使用多节电池设计产品时,大家都知道如果多节电池不均衡会影响电池寿命与充电安全。特别是在充电末端与放电末端时表现较为明显。 电池不均衡的影响 那么为什么会影响安全与寿命呢?其原因如下: 如果电池不均衡时,相当于木桶的短板效应。一方面没法充满,充电时电压高的那一…

利用ChatGPT提升学术论文写作技巧

ChatGPT无限次数:点击直达 利用ChatGPT提升学术论文写作技巧 在当今信息爆炸的时代&#xff0c;学术界对于深入研究和撰写高质量论文的要求越来越高。然而&#xff0c;许多研究人员和学生常常感到写作过程困难&#xff0c;需要花费大量时间和精力。这时候&#xff0c;人工智能…

在Ubuntu上使用Caddy轻松搭建WebDAV服务器

嘿&#xff0c;各位码农朋友们&#xff01;今天我要和大家介绍一下在 Ubuntu 下使用 Caddy 部署 WebDAV 的技术&#xff0c;让你的文件共享变得更加简单顺畅。 &#x1f31f;嗯&#xff0c;我得承认&#xff0c;三丰云的免费服务器真是不错&#xff01;它提供了1核CPU、1G内存…

提升性能与精准追踪:SkyWalking自定义跟踪忽略插件

前言 当使用分布式追踪系统时&#xff0c;有时需要排除某些端点或路径&#xff0c;以减轻追踪系统的负载或减少不必要的数据收集。为了满足这种需求&#xff0c;SkyWalking 提供了一个可选的插件&#xff0c;即 apm-trace-ignore-plugin&#xff0c;它允许自定义需要跳过的路径…

【跟小嘉学 Linux 系统架构与开发】三、如何查看帮助文档

系列文章目录 【跟小嘉学 Linux 系统架构与开发】一、学习环境的准备与Linux系统介绍 【跟小嘉学 Linux 系统架构与开发】二、Linux发型版介绍与基础常用命令介绍 【跟小嘉学 Linux 系统架构与开发】三、如何查看帮助文档 文章目录 系列文章目录[TOC](文章目录) 前言一、 命令…

nodejs爬图片(二)

前言 网上一张一张下载是不是很麻烦&#xff0c;直接批量下载&#xff0c;解决你的问题。高清不是梦&#xff01; 具体步骤不说了&#xff0c;直接上代码 const cheerio require("cheerio"); const axios require("axios"); const fs require(…

代码随想录算法训练营第42天| 01背包问题,你该了解这些|01背包问题,你该了解这些! 滚动数组 |416. 分割等和子集

代码随想录算法训练营第42天| 01背包问题&#xff0c;你该了解这些|01背包问题&#xff0c;你该了解这些&#xff01; 滚动数组 |416. 分割等和子集 &#xff08;****************************************************************&#xff09; &#xff08;挺难的&#xff0…

数据库嵌套事务的实现

Mysql本身&#xff08;只说InndoDB引擎&#xff09;是不支持嵌套事务的&#xff0c;就算你开了多个事务&#xff0c;也是按照一层处理。那我们所使用的应用框架&#xff0c;如php的laravel&#xff0c;Java的Spring&#xff0c;都是怎么实现事务嵌套的呢&#xff1f;本文就着这…

代码随想录刷题随记12-二叉树遍历

代码随想录刷题随记12-二叉树遍历 文章目录 代码随想录刷题随记12-二叉树遍历二叉树的递归遍历二叉树的迭代遍历前序遍历中序遍历后序遍历 二叉树的统一迭代法 二叉树的递归遍历 leetcode二叉树的前序遍历 解题代码&#xff1a; /*** Definition for a binary tree node.* st…

《QT实用小工具·七》CPU内存显示控件

1、概述 源码放在文章末尾 CPU内存显示控件 项目包含的功能如下&#xff1a; 实时显示当前CPU占用率。实时显示内存使用情况。包括共多少内存、已使用多少内存。全平台通用&#xff0c;包括windows、linux、ARM。发出信号通知占用率和内存使用情况等&#xff0c;以便自行显示…

类和对象的下篇

&#x1d649;&#x1d65e;&#x1d658;&#x1d65a;!!&#x1f44f;&#x1f3fb;‧✧̣̥̇‧✦&#x1f44f;&#x1f3fb;‧✧̣̥̇‧✦ &#x1f44f;&#x1f3fb;‧✧̣̥̇:Solitary_walk ⸝⋆ ━━━┓ - 个性标签 - &#xff1a;来于“云”的“羽球人”。…

2024年03月CCF-GESP编程能力等级认证Scratch图形化编程二级真题解析

本文收录于专栏《Scratch等级认证CCF-GESP真题解析》,专栏总目录・点这里. 一、单选题(共 10 题,每题 3 分,共 30 分) 第1题 小杨的父母最近刚刚给他买了一块华为手表,他说手表上跑的是鸿蒙,这个鸿蒙是?( )。 A、小程序 B、计时器 C、操作系统 D、神话人物 答案:…

【漏洞复现】大华 DSS user_edit.action 信息泄露漏洞

0x01 产品简介 DSS是大华的大型监控管理应用平台&#xff0c;支持几乎所有涉及监控等方面的操作&#xff0c;支持多级跨平台联网等操作。 可将视频监控、卡口拍照、 区间测速 、电子地图、违章查询系统等诸多主流应用整合在一起&#xff0c;实现更加智能、便捷的分级查询服务。…

CPU设计实战-FPGA基础操作学习

目录 硬件调试方法 ILA&#xff08;监控内如何端口信号&#xff09;或VIO核&#xff08;不仅可以监控还可以驱动&#xff09;进行硬件调试 添加ILAIP核 实例化ILAIP核 使用ILA排查错误 另一个debug方法 仿真 代码固化&#xff08;即写入Flash中&#xff09; 方法一 方…

代码随想录算法训练营第四十二天 | 卡码网46. 携带研究材料、416. 分割等和子集

代码随想录算法训练营第四十二天 | 卡码网46. 携带研究材料、416. 分割等和子集 卡码网46. 携带研究材料题目解法 416. 分割等和子集题目解法 感悟 卡码网46. 携带研究材料 题目 解法 题解链接 二维数组 # include <bits/stdc.h> using namespace std;int n, bagweig…