菜鸡的原地踏步史02(◐‿◑)
每日一念
改掉自己想到哪写哪的坏习惯
二叉树
二叉树的中序遍历
class Solution {/**中序遍历左 - 中 - 右*/private List<Integer> res = new ArrayList<>();public List<Integer> inorderTraversal(TreeNode root) {if(root == null) {return res;}tranverse(root);return res;}public void tranverse(TreeNode node) {if(node == null) {return;}tranverse(node.left);res.add(node.val);tranverse(node.right);}
}
二叉树的最大深度
class Solution {/**比较左右子树深度,取最大值,还要加上root的1*/int max = 0;public int maxDepth(TreeNode root) {if(root == null) {return 0;}return tranverse(root);}public int tranverse(TreeNode node) {if(node == null) {return 0;}int left = tranverse(node.left);int right = tranverse(node.right);max = Math.max(left, right) + 1;return max;}
}
翻转二叉树
class Solution {/**递归的每一层在干什么在交换结点*/public TreeNode invertTree(TreeNode root) {tranverse(root);return root;}public void tranverse(TreeNode node) {if(node == null) {return;}TreeNode temp = null;temp = node.left;node.left = node.right;node.right = temp;tranverse(node.left);tranverse(node.right);}
}
对称二叉树
class Solution {/**每一层在干什么?判断左子树结点和右子树结点是否值相同*/public boolean isSymmetric(TreeNode root) {if(root == null) {return true;}return tranverse(root.left, root.right);}public boolean tranverse(TreeNode left, TreeNode right) {if(left == null && right != null) {return false;}if(left != null && right == null) {return false;}if(left == null && right == null) {return true;}if(left.val != right.val) {return false;}boolean l = tranverse(left.left, right.right);boolean r = tranverse(left.right, right.left);return l && r;}}
二叉树的直径
class Solution {/***/int maxlen = 0;public int diameterOfBinaryTree(TreeNode root) {tranverse(root);return maxlen;}public int tranverse(TreeNode root) {if(root == null) {return 0;}int left = tranverse(root.left);int right = tranverse(root.right);maxlen = Math.max(left + right, maxlen);return Math.max(left, right) + 1;}
}
二叉树的层序遍历
class Solution {/**每一层保存root结点的值*/List<List<Integer>> res = new ArrayList();public List<List<Integer>> levelOrder(TreeNode root) {if(root == null) {return res;}tranverse(root, 0);return res;}public void tranverse(TreeNode root, int depth) {if(root == null) {return;}if(res.size() <= depth) {res.add(new ArrayList<>());}res.get(depth).add(root.val);tranverse(root.left, depth + 1);tranverse(root.right, depth + 1);}
}
将有序数组转化为二叉搜索树
class Solution {/**每一层要做什么提取目前nums的根节点,建立左右子树*/public TreeNode sortedArrayToBST(int[] nums) {if(nums == null || nums.length == 0) {return null;}return tranverse(nums, 0, nums.length - 1);}public TreeNode tranverse(int[] nums, int start, int end) {if(start > end) {return null;}int mid = (start + end) / 2;TreeNode root = new TreeNode(nums[mid]);root.left = tranverse(nums, start, mid - 1);root.right = tranverse(nums, mid + 1, end);return root;}
}
验证二叉搜索树
class Solution {/**每层在做什么可以类比前面将nums分段的,这题是在比较root.val和min、max*/public boolean isValidBST(TreeNode root) {return tranverse(root, null, null);}public boolean tranverse(TreeNode root, Integer min, Integer max) {if(root == null) {return true;}if((min != null && root.val <= min) || (max != null && root.val >= max)) {return false;}boolean left = tranverse(root.left, min, root.val);boolean right = tranverse(root.right, root.val, max);return left && right;}
}
二叉搜索树中第k小的元素
class Solution {/**简单朴素的想法将所有元素装到list里面,排序后找出第k-1个元素*/List<Integer> list = new ArrayList<>();public int kthSmallest(TreeNode root, int k) {tranverse(root);Collections.sort(list);return list.get(k - 1);}public void tranverse(TreeNode root) {if(root == null) {return;}list.add(root.val);tranverse(root.left);tranverse(root.right);}
}
二叉树的右视图
class Solution {/**每一层在做什么?先右子树depth++,再左子树depth--res.size() < depth时,没存这层的结点值,需要存一下*/List<Integer> res = new ArrayList<>();int depth = 0;public List<Integer> rightSideView(TreeNode root) {tranverse(root);return res;}public void tranverse(TreeNode root) {if(root == null) {return;}depth++;if(res.size() < depth) {res.add(root.val);}tranverse(root.right);tranverse(root.left);depth--;}
}
二叉树展开为链表
class Solution {/**每一层在干什么?将左子树结点移到右子树root.right右子树移到root右子树的最后结点.right2/ \3 42\3 42\3\4*/public void flatten(TreeNode root) {if(root == null) {return;}flatten(root.left);flatten(root.right);TreeNode node_left = root.left;TreeNode node_right = root.right;root.left = null;root.right = node_left;TreeNode newRoot = root;while(newRoot.right != null) {newRoot = newRoot.right;}newRoot.right = node_right;}
}
从前序和中序遍历构造二叉树
class Solution {public TreeNode buildTree(int[] preorder, int[] inorder) {return tranverse(preorder, 0, preorder.length - 1,inorder, 0, inorder.length - 1);}public TreeNode tranverse(int[] preorder, int preStart, int preEnd,int[] inorder, int inStart, int inEnd) {if(preStart > preEnd) {return null;}int rootValue = preorder[preStart];TreeNode root = new TreeNode(rootValue);int rootIndex = 0;for(int i = inStart; i <= inEnd; i++) {if(inorder[i] == rootValue) {rootIndex = i;}}int leftLen = rootIndex - inStart;int rightLen = inEnd - rootIndex;root.left = tranverse(preorder, preStart + 1, preStart + leftLen, inorder, inStart, rootIndex - 1);root.right = tranverse(preorder, preStart + leftLen + 1, preEnd, inorder, rootIndex + 1, inEnd);return root;}
}
路径总和III
class Solution {/**每一层在做什么?dps1到一层的根节点,dps2往下搜寻有没有和=targertSum的需要注意测试用例int转成long类型*/int ans = 0;int target = 0;public int pathSum(TreeNode root, int targetSum) {target = targetSum;dps1(root);return ans;}public void dps1(TreeNode root) {if(root == null) {return;}dps2(root, root.val);dps1(root.left);dps1(root.right);}public void dps2(TreeNode root, long t) {if(t == target) {ans++;}if(root.left != null) {dps2(root.left, root.left.val + t);}if(root.right != null) {dps2(root.right, root.right.val + t);}}
}
二叉树的最近公共祖先
class Solution {/**每一层都在做什么?left记录找到的最近左祖先,right记录找到的最近右祖先left right都有 -- 祖先root只在left -- 返回left只在right -- 返回right都没有 -- 返回null*/public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {if(root == null || root == p || root == q) {return root;}TreeNode left = lowestCommonAncestor(root.left, p, q);TreeNode right = lowestCommonAncestor(root.right, p, q);if(left != null && right != null) {return root;}else if(left != null) {return left;}else if(right != null) {return right;}else {return null;}}
}
二叉树中最大路径和
class Solution {/**难题直接灵神yyds看了灵神的题解,其实和最大深度差不多(真的 QAQ*/int ans = Integer.MIN_VALUE;public int maxPathSum(TreeNode root) {dps(root);return ans;}public int dps(TreeNode root) {if(root == null) {return 0;}int leftValue = dps(root.left);int rightValue = dps(root.right);ans = Math.max(ans, leftValue + rightValue + root.val);return Math.max(Math.max(leftValue, rightValue) + root.val, 0);}
}
相关文章:
菜鸡的原地踏步史02(◐‿◑)
每日一念 改掉自己想到哪写哪的坏习惯 二叉树 二叉树的中序遍历 class Solution {/**中序遍历左 - 中 - 右*/private List<Integer> res new ArrayList<>();public List<Integer> inorderTraversal(TreeNode root) {if(root null) {return res;}tranve…...
实现Java应用的数据加密与解密技术
实现Java应用的数据加密与解密技术 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿! 1. 数据加密与解密的重要性 数据安全是当今互联网应用开发中的重要问题之…...
赛博解压板
目录 开头程序程序的流程图程序的解压效果(暂无,但可以运行一下上面的代码)结尾 开头 大家好,我叫这是我58。今天,我们要看关于赛博解压板的一些东西。 程序 #define _CRT_SECURE_NO_WARNINGS 1 #define ROW 6//ROW表示行数,可…...
微信小程序常用的事件
1.点击事件 WXML 中绑定点击事件: <!-- index.wxml --> <button bindtap"handleTap">点击我</button> 对应的 JS 文件中编写点击事件处理函数: // index.js Page({handleTap: function() {console.log(按钮被点击了);} }…...
js时间转成xx前
// 时间戳转多少分钟之前 export default function getDateDiff(dateTimeStamp) {// console.log(dateTimeStamp,dateTimeStamp)// 时间字符串转时间戳var timestamp new Date(dateTimeStamp).getTime();var minute 1000 * 60;var hour minute * 60;var day hour * 24;var …...
iOS 锁总结(cc)
iOS中atomic和synchrosize锁的本质是什么? 在iOS中,atomic和@synchronized锁的本质涉及底层的多线程同步机制。以下是关于这两者本质的详细解释: atomic 定义与用途: atomic是Objective-C属性修饰符的一种,用于指示属性的存取方法是线程安全的。当一个属性被声明为ato…...
【CSAPP】-binarybomb实验
目录 实验目的与要求 实验原理与内容 实验设备与软件环境 实验过程与结果(可贴图) 操作异常问题与解决方案 实验总结 实验目的与要求 1. 增强学生对于程序的机器级表示、汇编语言、调试器和逆向工程等方面原理与技能的掌握。 2. 掌握使用gdb调试器…...
SpringBoot实战:轻松实现XSS攻击防御(注解和过滤器)
文章目录 引言一、XSS攻击概述1.1 XSS攻击的定义1.2 XSS攻击的类型1.3 XSS攻击的攻击原理及示例 二、Spring Boot中的XSS防御手段2.1 使用注解进行XSS防御2.1.1 引入相关依赖2.1.2 使用XSS注解进行参数校验2.1.3 实现自定义注解处理器2.1.4 使用注解 2.2 使用过滤器进行XSS防御…...
如何改善提示词,让 GPT-4 更高效准确地把视频内容整体转换成文章?
(注:本文为小报童精选文章。已订阅小报童或加入知识星球「玉树芝兰」用户请勿重复付费) 让我们来讨论一下大语言模型应用中的一个重要原则 ——「欲速则不达」。 作为一个自认为懒惰的人,我一直有一个愿望:完成视频制作…...
TensorBoard进阶
文章目录 TensorBoard进阶1.设置TensorBoard2.图像数据在TensorBoard中可视化3.模型结构在TensorBoard中可视化(重点✅)4.高维数据在TensorBoard中低维可视化5.利用TensorBoard跟踪模型的训练过程(重点✅)6.利用TensorBoard给每个…...
使用AES加密数据传输的iOS客户端实现方案
在现代应用开发中,确保数据传输的安全性是至关重要的。本文将介绍如何在iOS客户端中使用AES加密数据传输,并与服务器端保持加密解密的一致性。本文不会包含服务器端代码,但会解释其实现原理。 加密与解密的基本原理 AES(Advance…...
vue3【实战】语义化首页布局
技术要点,详见注释 <script setup></script><template><div class"page"><header>页头</header><nav>导航</nav><!-- 主体内容 --><main class"row"><aside>左侧边栏<s…...
FANG:利用社交网络图进行虚假新闻检测
1.概述 社交媒体已逐渐演变成为公众获取信息的主要途径。然而,值得警惕的是,并非所有流通的信息都具备真实性。特别是在政治选举、疫情爆发等关键节点,带有恶意企图的虚假信息(即“假新闻”)可能会对社会秩序、公平性和理性思考造成严重的干扰。作为全球抗击COVID-19的一部…...
Vue2 基础八电商后台管理项目——中
代码下载 商品分类页 新商品分类组件 goods/Cate.vue,在router.js中导入子级路由组件 Cate.vue,并设置路由规则。 绘制商品分类基本结构 在Cate.vue组件中添加面包屑导航以及卡片视图中的添加分类按钮: <template><div><…...
Typescript window.localStorage 存储 Obj Value区别
window.localStorage.setItem(UserC, JSON.stringify(userC)) const userC JSON.parse(window.localStorage.getItem(UserC) || {}) 不能获得UserC,所有保存的时候需要存储value,而不是对象。 {"__v_isShallow":false, "__v_isRef&quo…...
Linux要解压 .rar 文件,你应该使用 unrar 命令
命令 sudo tar -zxf ~/WebDemo.rar -C /usr/local 有一些问题。tar 命令通常用于解压 .tar、.tar.gz 或 .tar.bz2 文件,而不是 .rar 文件。要解压 .rar 文件,你应该使用 unrar 命令。下面是正确的步骤: 首先,安装 unrar࿰…...
【qt】如何获取网卡的信息?
网卡不只一种,有有线的,有无线的等等 我们用QNetworkInterface类的静态函数allInterfaces() 来获取所有的网卡 返回的是一个网卡的容器. 然后我们对每个网卡来获取其设备名称和硬件地址 可以通过静态函数humanReadableName() 来获取设备名称 可以通过静态函数**hardwareAddre…...
使用Netty框架实现WebSocket服务端与客户端通信(附ssl)
仓库地址: https://gitee.com/lfw1024/netty-websocket 导入后可直接运行 预览页面 自签证书: #换成自己的本地ip keytool -genkey -alias server -keyalg RSA -validity 3650 -keystore D:\mystore.jks -ext sanip:192.168.3.7,ip:127.0.0.1,dns:lo…...
ssm校园志愿服务信息系统-计算机毕业设计源码97697
摘 要 随着社会的进步和信息技术的发展,越来越多的学校开始重视志愿服务工作,通过组织各种志愿服务活动,让学生更好地了解社会、服务社会。然而,在实际操作中,志愿服务的组织和管理面临着诸多问题,如志愿者…...
JVM原理(二):JVM之HotSpot虚拟机中对象的创建寻位与定位整体流程
1. 对象的创建 遇到new指令时 当Java虚拟机遇到一个字节码new指令时。 首先会去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否被加载、解析和初始化过。 如果没有,那么必须执行类的加载过程(加载、检查…...
19c补丁后oracle属主变化,导致不能识别磁盘组
补丁后服务器重启,数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后,存在与用户组权限相关的问题。具体表现为,Oracle 实例的运行用户(oracle)和集…...
QMC5883L的驱动
简介 本篇文章的代码已经上传到了github上面,开源代码 作为一个电子罗盘模块,我们可以通过I2C从中获取偏航角yaw,相对于六轴陀螺仪的yaw,qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...
LeetCode - 394. 字符串解码
题目 394. 字符串解码 - 力扣(LeetCode) 思路 使用两个栈:一个存储重复次数,一个存储字符串 遍历输入字符串: 数字处理:遇到数字时,累积计算重复次数左括号处理:保存当前状态&a…...
Golang dig框架与GraphQL的完美结合
将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用,可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器,能够帮助开发者更好地管理复杂的依赖关系,而 GraphQL 则是一种用于 API 的查询语言,能够提…...
【C语言练习】080. 使用C语言实现简单的数据库操作
080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...
JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作
一、上下文切换 即使单核CPU也可以进行多线程执行代码,CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短,所以CPU会不断地切换线程执行,从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...
第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词
Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵,其中每行,每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid,其中有多少个 3 3 的 “幻方” 子矩阵&am…...
Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)
目录 一、👋🏻前言 二、😈sinx波动的基本原理 三、😈波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、🌊波动优化…...
2025季度云服务器排行榜
在全球云服务器市场,各厂商的排名和地位并非一成不变,而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势,对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析: 一、全球“三巨头”…...
TSN交换机正在重构工业网络,PROFINET和EtherCAT会被取代吗?
在工业自动化持续演进的今天,通信网络的角色正变得愈发关键。 2025年6月6日,为期三天的华南国际工业博览会在深圳国际会展中心(宝安)圆满落幕。作为国内工业通信领域的技术型企业,光路科技(Fiberroad&…...
