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

算法练习(2):牛客在线编程03 二叉树

package jz.bm;import jz.TreeNode;import java.util.*;public class bm3 {/*** BM23 二叉树的前序遍历*/public int[] preorderTraversal (TreeNode root) {ArrayList<Integer> list = new ArrayList<>();preOrder(root, list);int[] res = new int[list.size()];for (int i = 0; i < list.size(); i++) {res[i] = list.get(i);}return res;}private void preOrder(TreeNode root, ArrayList<Integer> list) {if (root != null) {list.add(root.val);preOrder(root.left, list);preOrder(root.right, list);}}/*** BM24 二叉树的中序遍历*/public int[] inorderTraversal (TreeNode root) {ArrayList<Integer> list = new ArrayList<>();inOrder(root, list);int[] res = new int[list.size()];for (int i = 0; i < list.size(); i++) {res[i] = list.get(i);}return res;}private void inOrder(TreeNode root, ArrayList<Integer> list) {if (root != null) {inOrder(root.left, list);list.add(root.val);inOrder(root.right, list);}}/*** BM25 二叉树的后序遍历*/public int[] postorderTraversal (TreeNode root) {ArrayList<Integer> list = new ArrayList<>();postOrder(root, list);int[] res = new int[list.size()];for (int i = 0; i < list.size(); i++) {res[i] = list.get(i);}return res;}private void postOrder(TreeNode root, ArrayList<Integer> list) {if (root != null) {postOrder(root.left, list);postOrder(root.right, list);list.add(root.val);}}/*** BM26 求二叉树的层序遍历*/public ArrayList<ArrayList<Integer>> levelOrder (TreeNode root) {ArrayList<ArrayList<Integer>> res = new ArrayList<>();if (root == null) {return res;}Queue<TreeNode> queue = new LinkedList<>();queue.add(root);while (!queue.isEmpty()) {int n = queue.size();ArrayList<Integer> list = new ArrayList<>();for (int i = 0; i < n; i++) {TreeNode cur = queue.poll();list.add(cur.val);if (cur.left != null) {queue.add(cur.left);}if (cur.right != null) {queue.add(cur.right);}}res.add(list);}return res;}/*** BM27 按之字形顺序打印二叉树*/public ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) {ArrayList<ArrayList<Integer>> res = new ArrayList<>();if (pRoot == null) {return res;}Queue<TreeNode> queue = new LinkedList<>();queue.add(pRoot);boolean flag = false;while (!queue.isEmpty()) {int n = queue.size();ArrayList<Integer> list = new ArrayList<>();for (int i = 0; i < n; i++) {TreeNode cur = queue.poll();list.add(cur.val);if (cur.left != null) {queue.add(cur.left);}if (cur.right != null) {queue.add(cur.right);}}if (flag) {Collections.reverse(list);}flag = !flag;res.add(list);}return res;}/*** BM28 二叉树的最大深度*/int max = 0;public int maxDepth (TreeNode root) {dfs28(root, 0);return max;}private void dfs28(TreeNode root, int depth) {if (root != null) {depth += 1;max = Math.max(max, depth);dfs28(root.left, depth);dfs28(root.right, depth);}}/*** BM29 二叉树中和为某一值的路径(一)*/boolean hasPath = false;public boolean hasPathSum (TreeNode root, int sum) {dfs29(root, sum);return hasPath;}private void dfs29(TreeNode root, int cur) {if (root != null) {cur -= root.val;if (root.left == null && root.right == null && cur == 0) {hasPath = true;return;}dfs29(root.left, cur);dfs29(root.right, cur);}}/*** BM30 二叉搜索树与双向链表*/TreeNode head;TreeNode pre;public TreeNode Convert(TreeNode pRootOfTree) {if (pRootOfTree != null) {Convert(pRootOfTree.left);if (pre == null) {head = pRootOfTree;} else {pre.right = pRootOfTree;pRootOfTree.left = pre;}pre = pRootOfTree;Convert(pRootOfTree.right);}return head;}/*** BM31 对称的二叉树*/public boolean isSymmetrical (TreeNode pRoot) {if (pRoot != null) {return mirror(pRoot.left, pRoot.right);} else {return true;}}private boolean mirror(TreeNode left, TreeNode right) {if (left == null && right == null) {return true;}if (right == null || left == null || left.val != right.val) {return false;}return mirror(left.left, right.right) && mirror(left.right, right.left);}/*** BM32 合并二叉树*/public TreeNode mergeTrees (TreeNode t1, TreeNode t2) {if (t1 == null) {return t2;}if (t2 == null) {return t1;}t1.val = t1.val + t2.val;t1.left = mergeTrees(t1.left, t2.left);t1.right = mergeTrees(t1.right, t2.right);return t1;}/*** BM34 判断是不是二叉搜索树*/boolean res34 = true;TreeNode pre34 = null;public boolean isValidBST (TreeNode root) {inOrder(root);return res34;}private void inOrder(TreeNode root) {if (root != null) {inOrder(root.left);if (pre34 == null) {pre34 = root;} else {if (root.val <= pre34.val) {res34 = false;}}pre34 = root;inOrder(root.right);}}/*** BM35 判断是不是完全二叉树*/public boolean isCompleteTree (TreeNode root) {if (root == null) {return true;}Queue<TreeNode> queue = new LinkedList<>();queue.add(root);boolean hasNull = false;while (!queue.isEmpty()) {TreeNode cur = queue.poll();if (cur == null) {hasNull = true; //遇到空的节点} else {//空的节点后面有非空的节点if (hasNull) {return false;}queue.add(cur.left);queue.add(cur.right);}}return true;}/*** BM36 判断是不是平衡二叉树*/public boolean IsBalanced_Solution (TreeNode pRoot) {if (pRoot == null) {return true;}return IsBalanced_Solution(pRoot.left) && IsBalanced_Solution(pRoot.right) && Math.abs(dfs36(pRoot.left) - dfs36(pRoot.right)) <= 1;}private int dfs36(TreeNode pRoot) {if (pRoot != null) {return Math.max(dfs36(pRoot.left), dfs36(pRoot.right)) + 1;}return 0;}/*** BM37 二叉搜索树的最近公共祖先*/public int lowestCommonAncestor (TreeNode root, int p, int q) {if (root == null) {return -1;}if ((p <= root.val && root.val <= q) || (q <= root.val && root.val <= p)) {return root.val;} else if (p <= root.val && q <= root.val) {return lowestCommonAncestor(root.left, p, q);} else {return lowestCommonAncestor(root.right, p, q);}}/*** BM38 在二叉树中找到两个节点的最近公共祖先*/public int lowestCommonAncestor1 (TreeNode root, int o1, int o2) {if (root == null) {return -1;}if (o1 == root.val || o2 == root.val) {return root.val;}int left = lowestCommonAncestor1(root.left, o1, o2);int right = lowestCommonAncestor1(root.right, o1, o2);if (left == -1) {return right;}if (right == -1) {return left;}//即不是左也不是右,只能是当前节点return root.val;}/*** BM40 重建二叉树*/public TreeNode reConstructBinaryTree (int[] preOrder, int[] vinOrder) {if (preOrder.length == 0 || vinOrder.length == 0) {return null;}TreeNode head = new TreeNode(preOrder[0]);int index = getIndex(preOrder[0],vinOrder);head.left = reConstructBinaryTree(Arrays.copyOfRange(preOrder, 1, index + 1), Arrays.copyOfRange(vinOrder, 0, index));head.right = reConstructBinaryTree(Arrays.copyOfRange(preOrder, index + 1, preOrder.length), Arrays.copyOfRange(vinOrder, index + 1, vinOrder.length));return head;}private int getIndex(int head, int[] vinOrder) {for (int i = 0; i < vinOrder.length; i++) {if (head == vinOrder[i]) {return i;}}return -1;}/*** BM41 输出二叉树的右视图*/public int[] solve (int[] preOrder, int[] inOrder) {TreeNode head = reConstructBinaryTree(preOrder, inOrder);if (head == null) {return new int[0];}ArrayList<Integer> list = new ArrayList<>();Queue<TreeNode> queue = new LinkedList<>();queue.add(head);while (!queue.isEmpty()) {int n = queue.size();for (int i = 0; i < n; i++) {TreeNode cur = queue.poll();if (i == n - 1) {list.add(cur.val);}if (cur.left != null) {queue.add(cur.left);}if (cur.right != null) {queue.add(cur.right);}}}int[] res = new int[list.size()];for (int i = 0; i < list.size(); i++) {res[i] = list.get(i);}return res;}
}

相关文章:

算法练习(2):牛客在线编程03 二叉树

package jz.bm;import jz.TreeNode;import java.util.*;public class bm3 {/*** BM23 二叉树的前序遍历*/public int[] preorderTraversal (TreeNode root) {ArrayList<Integer> list new ArrayList<>();preOrder(root, list);int[] res new int[list.size()];fo…...

回归预测 | MATLAB实现TCN-BiLSTM时间卷积双向长短期记忆神经网络多输入单输出回归预测

回归预测 | MATLAB实现TCN-BiLSTM时间卷积双向长短期记忆神经网络多输入单输出回归预测 目录 回归预测 | MATLAB实现TCN-BiLSTM时间卷积双向长短期记忆神经网络多输入单输出回归预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 1.MATLAB实现TCN-BiLSTM时间卷积…...

Linux 系列 常见 快捷键总结

强制停止 Ctrl C 退出程序、退出登录 Ctrl D 等价 exit 查看历史命令 history !命令前缀&#xff0c;自动匹配上一个命令 &#xff08;历史命令中&#xff1a;从最新——》最老 搜索&#xff09; ctrl r 输入内去历史命令中检索 # 回车键可以直接执行 ctrl a 跳到命令开头 …...

OA系统构建排座

目录 一.排座的介绍&#xff0c;作用 1.排座介绍 A.前端实现 B.数据库实现 C.后端实现 2.排座作用 A.座位预订 B.座位安排 C. 实时座位状态显示 二.利用Layui实现排座 1.基础版(通过htmlcssjs实现) A.基础版源码&#xff08;html&#xff09;&#xff1a; 2.进阶版 …...

微信小程序 居中、居右、居底和横向、纵向布局,文字在图片中间,网格布局

微信小程序居中、居右、横纵布局 1、水平垂直居中&#xff08;相对父类控件&#xff09;方式一&#xff1a;水平垂直居中 父类控件&#xff1a; display: flex;align-items: center;//子控件垂直居中justify-content: center;//子控件水平居中width: 100%;height: 400px //注意…...

【C++】总结2

文章目录 1.final和override关键字2.extern "C"的用法3.野指针和垂悬指针(悬空指针)4.指针指向的内存被释放是什么意思5.C和C的类型安全6.C中的重载、重写&#xff08;覆盖&#xff09;和隐藏的区别 1.final和override关键字 final和override是C11引入的关键字&…...

vue2项目中使用svg图标

在开发项目的时候经常会用到svg矢量图,而且我们使用SVG以后&#xff0c;页面上加载的不再是图片资源, 这对页面性能来说是个很大的提升&#xff0c;而且我们SVG文件比img要小的很多&#xff0c;放在项目中几乎不占用资源。 1、安装SVG依赖插件并配置加载器和路径 npm instal…...

阿里云盘自动每日签到无需部署无需服务器(仅限学习交流使用)

一、前言 阿里云盘自动每日签到&#xff0c;无需部署&#xff0c;无需服务器 执行思路&#xff1a;使用金山文档的每日定时任务&#xff0c;执行阿里云盘签到接口。 二、效果展示&#xff1a; 三、步骤&#xff1a; 1、进入金山文档网页版 金山文档官网&#xff1a;https:…...

Blazor前后端框架Known-V1.2.7

V1.2.7 Known是基于C#和Blazor开发的前后端分离快速开发框架&#xff0c;开箱即用&#xff0c;跨平台&#xff0c;一处代码&#xff0c;多处运行。 Gitee&#xff1a; https://gitee.com/known/KnownGithub&#xff1a;https://github.com/known/Known 概述 基于C#和Blazor…...

工业边缘计算为什么?

在工厂环境中使用边缘计算并不新鲜。可编程逻辑控制器&#xff08;PLC&#xff09;、微控制器、服务器和PC进行本地数据处理&#xff0c;甚至是微型数据中心都是边缘技术&#xff0c;已经在工厂系统中存在了几十年。在车间里看到的看板系统&#xff0c;打卡系统&#xff0c;历史…...

Training-Time-Friendly Network for Real-Time Object Detection 论文学习

1. 解决了什么问题&#xff1f; 目前的目标检测器很少能做到快速训练、快速推理&#xff0c;并同时保持准确率。直觉上&#xff0c;推理越快的检测器应该训练也很快&#xff0c;但大多数的实时检测器反而需要更长的训练时间。准确率高的检测器大致可分为两类&#xff1a;推理时…...

HTTP改HTTPS

tomcat中http协议改https 第一步&#xff0c;配置server.xml <?xml version"1.0" encoding"UTF-8"?> <Server port"8005" shutdown"SHUTDOWN"><Listener className"org.apache.catalina.startup.VersionLogger…...

网络层中一些零碎且易忘的知识点

异构网络&#xff1a;指传输介质、数据编码方式、链路控制协议以及数据单元格式和转发机制不同&#xff0c;异构即物理层和数据链路层均不同RIP、OSPF、BGP分别是哪一层的协议&#xff1a; -RIPOSPFBGP所属层次应用层网络层应用层封装在什么协议中UDPIPTCP 一个主机可以有多个I…...

【RabbitMQ】之高可用集群搭建

目录 一、RabbitMQ 集群原理 1、默认集群原理2、镜像集群原理3、负载均衡方案 二、RabbitMQ 高可用集群搭建 1、RabbitMQ 集群搭建2、配置镜像队列3、HAProxy 环境搭建4、Keepalived 环境搭建 一、RabbitMQ 集群简介 1、默认集群原理 3-1、RabbitMQ 集群简介 单台 RabbitM…...

【node.js】01-fs读写文件内容

目录 一、fs.readFile() 读取文件内容 二、fs.writeFile() 向指定的文件中写入内容 案例&#xff1a;整理txt 需求&#xff1a; 代码&#xff1a; 一、fs.readFile() 读取文件内容 代码&#xff1a; //导入fs模块&#xff0c;从来操作文件 const fs require(fs)// 2.调…...

GitHub仓库如何使用

核心&#xff1a;GitHub仓库如何使用 目录 1.创建仓库&#xff1a; 2.克隆仓库到本地&#xff1a; 3.添加、提交和推送更改&#xff1a; 4.分支管理&#xff1a; 5.拉取请求&#xff08;Pull Requests&#xff09;&#xff1a; 6.合并代码&#xff1a; 7.其他功能&…...

雪花算法,在分布式环境下实现高效的ID生成

其实雪花算法比较简单&#xff0c;可能称不上什么算法就是一种构造UID的方法。 点1&#xff1a;UID是一个long类型的41位时间戳&#xff0c;10位存储机器码&#xff0c;12位存储序列号。 点2&#xff1a;时间戳的单位是毫秒&#xff0c;可以同时链接1024台机器&#xff0c;每台…...

使用css 动画实现,水波纹的效果

每日鸡汤&#xff1a;每个你想要学习的瞬间都是未来的你向自己求救 需求&#xff0c;实现水波纹动画效果&#xff0c;要求中心一个圆点&#xff0c;然后有3个圈&#xff0c;一圈一圈的向里面缩小。 说实话我第一个想到了给3个圈设置不同的宽高&#xff0c;然后设置动画0-100%&a…...

Unity光照相关知识和实践 (烘焙光照,环境光设置,全局光照)

简介 本文将会通过一个简单的场景搭建&#xff0c;介绍如何使用烘焙光照以及相关的注意事项。另外还介绍了Unity内全局光照&#xff08;GI&#xff09;的知识和GI实际在游戏内的表现效果。 Unity关于光照相关的参考文档地址&#xff1a;https://docs.unity.cn/cn/current/Man…...

【设计模式——学习笔记】23种设计模式——适配器模式Adapter(原理讲解+应用场景介绍+案例介绍+Java代码实现)

文章目录 介绍生活中的案例基础介绍工作原理分类应用场景 案例类适配器模式例1介绍类图代码实现优缺点分析 例2类图代码实现 对象适配器模式&#xff08;常用方式&#xff09;例1介绍类图代码实现优缺点分析 例2代码实现 接口适配器模式介绍类图代码实现 登场角色类图类适配器模…...

tools.simonwillison.net图像处理工具集:从裁剪到优化的完整指南

tools.simonwillison.net图像处理工具集&#xff1a;从裁剪到优化的完整指南 【免费下载链接】tools Assorted useful tools, almost entirely generated using LLMs 项目地址: https://gitcode.com/gh_mirrors/tools23/tools tools.simonwillison.net图像处理工具集是一…...

别再让模型在Unity里‘抽风’了!Blender导出FBX到Unity的7步避坑自查清单

别再让模型在Unity里‘抽风’了&#xff01;Blender导出FBX到Unity的7步避坑自查清单当你花了三天三夜精心雕琢的Blender模型&#xff0c;导入Unity后却变成了一团旋转错乱、贴图闪烁的"抽象艺术"&#xff0c;那种崩溃感每个3D开发者都懂。本文将用实战经验帮你建立一…...

番茄小说下载器终极指南:三步构建你的离线阅读自由王国

番茄小说下载器终极指南&#xff1a;三步构建你的离线阅读自由王国 【免费下载链接】Tomato-Novel-Downloader 番茄小说下载器不精简版 项目地址: https://gitcode.com/gh_mirrors/to/Tomato-Novel-Downloader 你是否曾在地铁里读到精彩章节时突然断网&#xff1f;是否在…...

Scroll Reverser:让Mac的多设备滚动体验回归直觉的免费神器

Scroll Reverser&#xff1a;让Mac的多设备滚动体验回归直觉的免费神器 【免费下载链接】Scroll-Reverser Per-device scrolling prefs on macOS. 项目地址: https://gitcode.com/gh_mirrors/sc/Scroll-Reverser 你是否曾经在MacBook的触控板和鼠标之间切换时&#xff0…...

千亿镁合金产业集群正在成形:成都、抚州、池州的新版图

一个新赛道的地理坐标 如果要在中国地图上标注一条正在成形的新兴产业集群走廊&#xff0c;高强镁合金这条线&#xff0c;值得被认真画出来。 成都龙泉驿——江西抚州临川——安徽池州高新区&#xff0c;三个坐标&#xff0c;三条生产线&#xff0c;一家公司&#xff0c;两年内…...

荣耀出征官方网站下载正版手游 翅膀养成细节玩法全方位讲解

玩荣耀出征的玩家都清楚&#xff0c;翅膀不仅是角色的颜值象征&#xff0c;更是提升整体战力的核心途径。很多新手玩家只顾着升级、刷装备&#xff0c;完全忽略翅膀养成&#xff0c;导致等级很高但战力始终上不去。还有不少玩家胡乱合成、盲目进阶&#xff0c;浪费了大量稀有翅…...

为什么你的DeepSeek微调loss震荡不止?(Meta/DeepSeek联合团队未公开的梯度裁剪+LoRA初始化双校准协议)

更多请点击&#xff1a; https://codechina.net 第一章&#xff1a;DeepSeek微调loss震荡的根本归因剖析 DeepSeek系列模型在微调过程中频繁出现loss剧烈震荡现象&#xff0c;其本质并非单一因素所致&#xff0c;而是数据、优化器、梯度动态与模型结构四者耦合失稳的系统性表现…...

危急时刻的六条基本安全提示

人机协作&#xff0c;AI模型&#xff1a;Deepseek 仅供参考 危急时刻的六条基本安全提示 以下内容仅为通用性安全建议&#xff0c;供在紧急情况下保持冷静、保护自身安全时参考。所有建议均基于常理和公共安全常识&#xff0c;不包含任何具体操作细节或可能被不当使用的信息…...

3分钟搞定专业短视频!Pixelle-Video终极AI创作指南

3分钟搞定专业短视频&#xff01;Pixelle-Video终极AI创作指南 【免费下载链接】Pixelle-Video &#x1f680; AI 全自动短视频引擎 | AI Fully Automated Short Video Engine 项目地址: https://gitcode.com/GitHub_Trending/pi/Pixelle-Video 还在为视频制作发愁吗&am…...

WarcraftHelper:让魔兽争霸3在现代电脑上完美运行的关键插件

WarcraftHelper&#xff1a;让魔兽争霸3在现代电脑上完美运行的关键插件 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 你是否还在为《魔兽争霸3》这…...