【牛客网刷题记录】【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;}

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

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

相关文章

Vue+NestJS项目实操(图书管理后台)

一、项目搭建 前端基于vben进行二次开发 在Github下载vben框架&#xff0c;搜索vben即可 下载地址&#xff1a;https://github.com/vbenjs/vue-vben-admin 下载完成后&#xff0c;进行安装依赖&#xff0c;使用命令&#xff1a; // 下载依赖 pnpm install// 运行项目 pnpm …

数据分析-30-电影死亡笔记中的数据分析思维

文章目录 1 死亡笔记简介2 推理过程中的数据分析2.1 第一个问题2.2 第二个问题2.3 第三个问题3 数据分析的发展4 参考附录1 死亡笔记简介 《死亡笔记》改编自小畑健同名日本人气漫画《Death note》,故事描述拥有一本写上姓名就能将人置于死地笔记本的高中生夜神月与天才警部搜…

构建企业数字化转型的战略基石——TOGAF框架的深度解析

数字化时代的企业变革需求 在全球范围内&#xff0c;数字化转型已成为企业提高竞争力、优化运营流程、提升客户体验的核心战略。数字技术的迅猛发展&#xff0c;不仅改变了传统行业的运作模式&#xff0c;也迫使企业重新思考其业务架构和技术基础设施。TOGAF&#xff08;The O…

8.数据结构与算法-双向链表

双向链表的结构定义 从第二个指针找到下一个元素 从第一个指针找到上一个元素 双向循环列表 从第二个指针找到下一个元素&#xff0c;第二个指针可以往前循环找到链表开头 从第一个指针找到上一个元素&#xff0c;第一个指针可以往前循环昭侯链表结尾 双向链表的插入 双向链…

自闭症孩子快乐成长之路:选择寄宿学校的理由

在探索自闭症孩子快乐成长之路的过程中&#xff0c;许多家长面临着一系列的选择与挑战。如何为孩子找到一个既能提供专业教育&#xff0c;又能保障他们身心健康的成长环境&#xff0c;成为了家长们共同关注的焦点。广州的星贝育园自闭症儿童寄宿制学校&#xff0c;正是这样一所…

Linux 万字入门教程

0. 前言 文章已经收录到 GitHub 个人博客项目&#xff0c;欢迎 Star&#xff1a; https://github.com/chenyl8848/chenyl8848.github.io或者访问网站&#xff0c;进行在线浏览&#xff1a; https://chenyl8848.github.io/1. Linux 介绍 1.1 引言 Linux 是一套免费使用和自由…

利用Spring Boot构建足球青训管理平台

2 相关技术简介 2.1 Java技术 Java是一门伟大的纯面向对象的编程语言和编程语言。同时&#xff0c;它还是Java语言从嵌入式开发到企业级开发的平台。Java凭借其一次编译&#xff0c;任何地方执行的优点&#xff0c;使得盛行的web应用程序有大量的Java编译&#xff0c;很好地支…

无人机科普研学基地建设技术详解

无人机科普研学基地的建设技术详解涉及多个方面&#xff0c;包括基地建设规划、主要功能区划分、配套设备与系统、课程设计与实施等。以下是对这些方面的详细阐述&#xff1a; 一、基地建设规划 1. 目标定位&#xff1a;无人机科普研学基地旨在通过实践和学习活动&#xff0c;…

CountDownlatch、CyclicBarrier、Semaphore使用介绍

一、CountDownlatch(多线程通信计数器实现多个线程的协同工作) import java.util.concurrent.CountDownLatch; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors;public class CountDownLatchTest {public static void main(String[] arg…

隐马尔可夫模型在股市预测中的应用

隐马尔可夫模型在股市预测中的应用 原创 QuantML QuantML 2024年09月29日 21:44 Content 摘要 股市因其复杂多变的特性&#xff0c;预测未来股价一直是一个挑战。然而&#xff0c;运用高级方法可以显著提高股价预测的准确性。隐马尔可夫模型&#xff08;Hidden Markov Mode…

常用的Java安全框架

Spring Security&#xff1a; 就像Java安全领域的“瑞士军刀”&#xff0c;功能全面且强大。 支持认证、授权、加密、会话管理等安全功能。 与Spring框架无缝集成&#xff0c;使用起来特别方便。 社区活跃&#xff0c;文档丰富&#xff0c;遇到问题容易找到解决方案。 Apach…

python中的find函数怎么用

Python find() 方法检测字符串中是否包含子字符串 str &#xff0c;如果指定 beg&#xff08;开始&#xff09; 和 end&#xff08;结束&#xff09; 范围&#xff0c;则检查是否包含在指定范围内&#xff0c;如果包含子字符串返回开始的索引值&#xff0c;否则返回-1。 语法 …

嵌入式 DAC基础知识

DAC 基本原理 DAC&#xff08;Digital-to-Analog Canverter&#xff09;&#xff0c;指数字/模拟转换器。可将数字量转换为成比例的模拟电压或电流。举个例子&#xff0c;计算机可能产生范围从 00000000 到 11111111 的数字输出&#xff0c;DAC 将其转换为范围从 0 到 10V 的电…

Docker 安装 Citus 单节点集群:全面指南与详细操作

Docker 安装 Citus 单节点集群&#xff1a;全面指南与详细操作 文章目录 Docker 安装 Citus 单节点集群&#xff1a;全面指南与详细操作一 服务器资源二 部署图三 安装部署1 创建网络2 运行脚本1&#xff09;docker-compose.cituscd1.yml2&#xff09;docker-compose.cituswk1.…

zabbix7.0创建自定义模板的案例详解(以监控httpd服务为例)

前言 服务端配置 链接: rocky9.2部署zabbix服务端的详细过程 环境 主机ip应用zabbix-server192.168.10.11zabbix本体zabbix-client192.168.10.12zabbix-agent zabbix-server(服务端已配置) 创建模板 模板组直接写一个新的&#xff0c;不用选择 通过名称查找模板&#xf…

Oracle架构之数据库备份和RAC介绍

文章目录 1 数据库备份1.1 数据库备份分类1.1.1 逻辑备份与物理备份1.1.2 完全备份/差异备份/增量备份 1.2 Oracle 逻辑备份1.2.1 EXP/IMP1.2.1.1 EXP导出1.2.1.2 EXP关键字说明1.2.1.3 导入1.2.1.4 IMP关键字说明 1.2.2 EXPDP/IMPDP1.2.2.1 数据泵介绍1.2.2.2 数据泵的使用 1.…

机器智能的自主分级与人、机、环境有关

自主分级是指机器智能在特定任务中根据自身能力、环境变化及人类需求&#xff0c;自动调整其操作和决策水平的能力。随着人工智能技术的不断发展&#xff0c;机器智能的自主分级成为了研究的热点&#xff0c;尤其是在自动驾驶、智能制造和人机协作等领域。自主分级不仅可以提高…

【ios】---swift开发从入门到放弃

swift开发从入门到放弃 环境swift入门变量与常量类型安全和类型推断print函数字符串整数双精度布尔运算符数组集合set字典区间元祖可选类型循环语句条件语句switch语句函数枚举类型闭包数组方法结构体 环境 1.在App Store下载Xcode 2.新建项目&#xff08;可以先使用这个&…

数据结构-4.1.特殊矩阵的压缩存储

一.一维数组的存储结构&#xff1a; 1.知道一维数组的起始地址&#xff0c;就可以求出任意下标对应的元素所在的地址&#xff1b; 2.注&#xff1a;如果数组下标从1开始&#xff0c;上述公式的i就要改为i-1&#xff1b; 3.数组里的元素类型相同&#xff0c;因此所占空间也相同…

转码第 188 天-高德算法实习面经分享

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