当前位置: 首页 > news >正文

【牛客网刷题记录】【java】二叉树

(1)二叉树的前中后遍历

最基本的树的遍历,不会可以重开了

public class Solution {/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** * @param root TreeNode类 * @return int整型一维数组*/public void preorder(List<Integer> list, TreeNode root){// 先序遍历则先处理根节点list.add(root.val);if(root.left!=null){preorder(list, root.left);}if(root.right!=null){preorder(list, root.right);}}public int[] preorderTraversal (TreeNode root) {if(root==null){return new int[0];}// write code hereList<Integer> tmp=new ArrayList<>();preorder(tmp, root);int [] res=new int[tmp.size()];for(int i=0; i<res.length; i++){res[i]=tmp.get(i);}return res;}
}

前序遍历的顺序为 根-左-右,中序为左-根-右,后序为左-右-根,因此这些遍历也可以说是先根、中根、后根遍历。

 public void preorder(List<Integer> list, TreeNode root){// 先序遍历则先处理根节点// list.add(root.val);if(root.left!=null){preorder(list, root.left);}//list.add(root.val); 中序遍历if(root.right!=null){preorder(list, root.right);}//list.add(root.val); 后续遍历}

(2) 二叉树的最大深度

链接
不知道空间复杂度为O(1)的算法是什么…除非你修改树的数据结构,因此这显然是不成立的。
首先可以用dfs来做,空间复杂度为O(n),即为栈的高度。空间复杂度会为n是因为树可能只有一个分支。我们可以再写一个函数来完成dfs。即如果左子非空,则向左dfs,同时deep+1.右子非空,则向右dfs,同时deep+1. 最后查看max与deep的大小,并且更改max。如果理解不了可以学习栈的知识,以及递归是怎么做到的。

int max=0;public void dfs(TreeNode root, int deep){if(root.left!=null){dfs(root.left, deep+1);}if(root.right!=null){dfs(root.right, deep+1);}if(max<deep){max=deep;} }public int maxDepth (TreeNode root) {// write code hereif(root==null){return 0;}dfs(root,1);return max;}

除此之外,还可以用层序遍历,即记录有多少层,这样也可以得到最大深度。但空间复杂度一定不为O(1),而是O(n).
层序遍历需要单独记录一下每一层的元素,这样可以判断何时遍历完一层。

public int maxDepth (TreeNode root) {if(root==null){return 0;}int max=0;// write code hereQueue<TreeNode> q=new LinkedList<>();q.add(root);while(!q.isEmpty()){int len=q.size();for(int i=0; i<len; i++){TreeNode t=q.poll();if(t.left!=null){q.add(t.left);}if(t.right!=null){q.add(t.right);}}max++;}return max;}

(3) 二叉搜索树与双向链表

链接
不难发现,二叉搜索树的中序遍历就是我们最终需要的顺序,因此这题一定会和中序遍历扯上关系。我们的基本思路就是中序遍历,即:

 public void inorder(List<Integer> list, TreeNode root){if(root.left!=null){preorder(list, root.left);}list.add(root.val); // 或者其他操作 if(root.right!=null){preorder(list, root.right);}}

重点问题是如何处理前驱和后继的指向。可以创建空节点pre,前驱用当前节点的左指针指向pre,而pre的右指针指向当前节点,最后将pre指向当前节点。我们的这部分就是中序遍历的操作部分,即上面代码的 其他操作。
我们的convert操作即为inorder遍历,但不需要做任何操作。中序的节点操作即对我刚刚描述的内容的转义。

public class Solution {TreeNode pre=null, head=null;public TreeNode Convert(TreeNode pRootOfTree) {if(pRootOfTree==null){return null;}Convert(pRootOfTree.left);// 开始找到头节点if(head==null){head=pRootOfTree;pre=head;}else{pRootOfTree.left=pre;pre.right=pRootOfTree;pre=pRootOfTree;}Convert(pRootOfTree.right);return head;}
}

(4) 合并二叉树

链接
可以用递归来做,如果t1为null则返回t2,反之返回t1。每次都合并一次节点即可。

public TreeNode mergeTrees (TreeNode t1, TreeNode t2) {if(t1==null){return t2;}if(t2==null){return t1;}// write code hereTreeNode head=new TreeNode(t1.val+t2.val);head.left=mergeTrees(t1.left, t2.left);head.right=mergeTrees(t1.right, t2.right);return head;}

相关文章:

【牛客网刷题记录】【java】二叉树

&#xff08;1&#xff09;二叉树的前中后遍历 最基本的树的遍历&#xff0c;不会可以重开了 public class Solution {/*** 代码中的类名、方法名、参数名已经指定&#xff0c;请勿修改&#xff0c;直接返回方法规定的值即可** * param root TreeNode类 * return int整型一维…...

一文讲透大语言模型构建流程

最近已有不少大厂都在秋招宣讲了&#xff0c;也有一些在 Offer 发放阶段。 节前&#xff0c;我们邀请了一些互联网大厂朋友、今年参加社招和校招面试的同学。 针对新手如何入门算法岗、该如何准备面试攻略、面试常考点、大模型技术趋势、算法项目落地经验分享等热门话题进行了…...

VR视频怎样进行加密和一机一码的使用?--加密(一)

在视频加密领域&#xff0c;我们常见接触的就是在普通设备上使用的加密视频&#xff0c;如电脑、手机、平板等。Vr的发展和兴起给人们带来最真实的体验感受&#xff0c;不仅在游戏行业应用较广&#xff0c;在一些影院或者元宇宙文旅、展厅等视频场景也备受青睐。 随着VR视频场景…...

Ubuntu启动后第一次需要很久才能启动GTK应用问题

Ubuntu启动后第一次需要很久才能启动GTK应用问题 自从升级了 Ubuntu 之后&#xff0c;设备重启&#xff0c;发现打开 Terminal 、Nautilus 以及其他的GTK 应用都很慢&#xff0c;需要至少一分钟的时间启动。 刚开始也是拿着 journalctl 的异常日志去寻找答案&#xff0c;但是没…...

栏目二:Echart绘制动态折线图+柱状图

栏目二&#xff1a;Echart绘制动态折线图柱状图 配置了一个ECharts图表&#xff0c;该图表集成了数据区域缩放、双Y轴显示及多种图表类型&#xff08;折线图、柱状图、象形柱图&#xff09;。图表通过X轴数据展示&#xff0c;支持平滑折线展示比率数据并自动添加百分比标识&…...

Gromacs——使用过程中暴露问题分析及学习

gromacs——突变残基蛋白电场MD和基本分析从入门到发SCIENCE&#xff1a;基于Gromacs的蛋白小分子动态模拟全过程解析水溶性蛋白模拟全过程&#xff1a;从准备蛋白结构文件&#xff08;top、itp、gro文件生成&#xff09;到模拟数据分析GromacsGROMACS 教程&#xff1a;蛋白配体…...

Webpack模式-Resolve-本地服务器

目录 ResolveMode配置搭本地服务器区分环境配置 Resolve 前面学习时使用了各种各样的模块依赖&#xff0c;这些模块可能来自于自己编写的代码&#xff0c;也可能来自第三方库&#xff0c;在 Webpack 中&#xff0c;resolve 是用于解析模块依赖的配置项&#xff0c;它决定了 We…...

【LLM论文日更】| 通过指令调整进行零样本稠密检索的无监督文本表示学习

论文&#xff1a;https://arxiv.org/pdf/2409.16497代码&#xff1a;暂未开源机构&#xff1a;Amazon AGI、宾夕法尼亚州立大学领域&#xff1a;Dense Retrieval发表&#xff1a;Accepted at DCAI24 workshopCIKM2024 研究背景 研究问题&#xff1a;这篇文章要解决的问题是如…...

02.01、移除重复节点

02.01、[简单] 移除重复节点 1、题目描述 编写代码&#xff0c;移除未排序链表中的重复节点。保留最开始出现的节点。 2、解题思路 为了实现这一目标&#xff0c;我们可以使用一个哈希表&#xff08;或集合&#xff09;来记录已经遇到的节点值&#xff0c;逐步遍历链表并删…...

旅游推荐|旅游推荐系统|基于Springboot+VUE的旅游推荐系统设计与实现(源码+数据库+文档)

旅游推荐系统 目录 基于java的旅游推荐系统设计与实现 一、前言 二、系统功能设计 三、系统实现 四、数据库设计 1、实体ER图 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介绍&#xff1a;✌️大厂码农|毕设布道师&#xf…...

github项目--crawl4ai

github项目--crawl4ai 输出html输出markdown格式输出结构化数据与BeautifulSoup的对比 crawl4ai github上这个项目&#xff0c;没记错的话&#xff0c;昨天涨了3000多的star&#xff0c;今天又新增2000star。一款抓取和解析工具&#xff0c;简单写个demo感受下 这里我们使用cra…...

仅有N卡独显的情况下安装ubuntu是遇到的黑屏,加载卡顿等问题

Ubuntu安装的两个阶段都要进行一定的设置来临时禁用掉独显或者ubuntu的通用显卡驱动。 U盘启动阶段 U盘启动阶段要对U盘启动项进行设置,通过BIOS设置第一boot为USB hard disk后可以进到U盘引导项,第一项为 “try or install ubuntu”,倒计时10s后自动进入。 这个时候不要…...

Vite:为什么选 Vite

一、现实问题 在浏览器支持 ES 模块之前&#xff0c;JavaScript 并没有提供原生机制让开发者以模块化的方式进行开发。这也正是我们对 “打包” 这个概念熟悉的原因&#xff1a;使用工具抓取、处理并将我们的源码模块串联成可以在浏览器中运行的文件。 时过境迁&#xff0c;我…...

个人项目简单https服务配置

1.SSL简介 SSL证书是一种数字证书&#xff0c;由受信任的证书颁发机构&#xff08;CA&#xff09;颁发&#xff0c;用于在互联网通信中建立加密链接。SSL代表“安全套接层”&#xff0c;是用于在互联网上创建加密链接的协议。SSL证书的主要目的是确保数据传输的安全性和隐私性…...

Rust 函数

Rust 函数 Rust 是一种系统编程语言&#xff0c;以其安全性、并发性和性能而闻名。函数是 Rust 编程语言中的基本构建块&#xff0c;用于封装可重用的代码块。本文将深入探讨 Rust 中的函数&#xff0c;包括其定义、特性、参数、返回值以及高级概念。 函数定义 在 Rust 中&a…...

微信小程序中的 `<block>` 元素:高效渲染与结构清晰的利器

微信小程序中的 <block> 元素&#xff1a;高效渲染与结构清晰的利器 在微信小程序的开发中&#xff0c;<block> 元素扮演着举足轻重的角色。尽管它不会在页面中渲染任何可见的节点&#xff0c;但作为一个逻辑上的容器&#xff0c;<block> 在条件渲染和循环渲…...

选读算法导论5.2 指示器随机变量

为了分析包括包括雇佣分析在内的许多算法&#xff0c;我们将使用指示器随机变量&#xff0c;它为概率和期望之间的转换提供了一个便利的方法&#xff0c;给定一个样本空间S和事件A&#xff0c;那么事件A对应的指示器随机变量&#xff1a; Xa 1 如果A发生    0 如果…...

大数据-154 Apache Druid 架构与原理详解 基础架构、架构演进

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff08;已更完&#xff09;HDFS&#xff08;已更完&#xff09;MapReduce&#xff08;已更完&am…...

centos9 nginx 版本

centos9 安装 ssh -V OpenSSH_8.7p1, OpenSSL 3.2.2 4 Jun 2024 openssl version OpenSSL 3.2.2 4 Jun 2024 (Library: OpenSSL 3.2.2 4 Jun 2024) sudo yum install nginx Installing:nginx x86_64 2:1.20.1…...

https访问报错:net::ERR_CERT_DATE_INVALLD

目录 简介异常排查原因解决补充 简介 访问https资源出现报错 异常 排查 将地址拿到浏览器进行访问&#xff0c;可以很清晰的看到出现该问题的原因 原因 1、SSL证书已过期 2、服务器日期不准&#xff0c;不在证书有效期 解决 1、重新申请SSL证书&#xff0c;并配置 2、校正…...

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…...

idea大量爆红问题解决

问题描述 在学习和工作中&#xff0c;idea是程序员不可缺少的一个工具&#xff0c;但是突然在有些时候就会出现大量爆红的问题&#xff0c;发现无法跳转&#xff0c;无论是关机重启或者是替换root都无法解决 就是如上所展示的问题&#xff0c;但是程序依然可以启动。 问题解决…...

边缘计算医疗风险自查APP开发方案

核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...

遍历 Map 类型集合的方法汇总

1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...

【磁盘】每天掌握一个Linux命令 - iostat

目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat&#xff08;I/O Statistics&#xff09;是Linux系统下用于监视系统输入输出设备和CPU使…...

剑指offer20_链表中环的入口节点

链表中环的入口节点 给定一个链表&#xff0c;若其中包含环&#xff0c;则输出环的入口节点。 若其中不包含环&#xff0c;则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...

【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具

第2章 虚拟机性能监控&#xff0c;故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令&#xff1a;jps [options] [hostid] 功能&#xff1a;本地虚拟机进程显示进程ID&#xff08;与ps相同&#xff09;&#xff0c;可同时显示主类&#x…...

什么是Ansible Jinja2

理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具&#xff0c;可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板&#xff0c;允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板&#xff0c;并通…...

【Go语言基础【13】】函数、闭包、方法

文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数&#xff08;函数作为参数、返回值&#xff09; 三、匿名函数与闭包1. 匿名函数&#xff08;Lambda函…...

算法:模拟

1.替换所有的问号 1576. 替换所有的问号 - 力扣&#xff08;LeetCode&#xff09; ​遍历字符串​&#xff1a;通过外层循环逐一检查每个字符。​遇到 ? 时处理​&#xff1a; 内层循环遍历小写字母&#xff08;a 到 z&#xff09;。对每个字母检查是否满足&#xff1a; ​与…...