菜鸡的原地踏步史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指令时。 首先会去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否被加载、解析和初始化过。 如果没有,那么必须执行类的加载过程(加载、检查…...

(七)glDrawArry绘制
几何数据:vao和vbo 材质程序:vs和fs(顶点着色器和片元着色器) 接下来只需要告诉GPU,使用几何数据和材质程序来进行绘制。 #include <glad/glad.h>//glad必须在glfw头文件之前包含 #include <GLFW/glfw3.h> #include <iostrea…...

记一次小程序渗透
这次的小程序渗透刚好每一个漏洞都相当经典所以记录一下。 目录 前言 漏洞详情 未授权访问漏洞/ 敏感信息泄露(高危) 水平越权(高危) 会话重用(高危) 硬编码加密密钥泄露(中危࿰…...

C++ 的常见算法 之一
C 的常见算法 之一 不修改序列算法for_eachcountfind 修改序列算法copymove 不修改序列算法 for_each #include <iostream> // std::cout #include <algorithm> // std::for_each #include <vector> // std::vectorusing namespace std;struc…...

微前端的需求有哪些?微前端的原理是怎么样的?为什么这么设计,及微前端的应用场景是什么?对有些客户,前端的重要性高于后端
微前端(Micro Frontends)是将前端应用拆分成多个独立、可部署的部分,每个部分可以由不同的团队独立开发、测试、部署和维护。这种架构类似于微服务在后端的应用,是为了应对复杂前端应用的维护和扩展问题而提出的。 来龙去脉 背景…...

【Spring Boot】统一数据返回
目录 统一数据返回一. 概念二.实现统一数据返回2.1 重写responseAdvice方法2.2 重写beforeBodyWriter方法 三. 特殊类型-String的处理四. 全部代码 统一数据返回 一. 概念 其实统一数据返回是运用了AOP(对某一类事情的集中处理)的思维,简单…...

证券交易系统中服务器监控系统功能设计
1.背景介绍 此服务器监控系统的目的在于提高行情服务器的监管效率,因目前的的行情服务器,包括DM、DT、DS配置数量较多,巡回维护耗时较多,当行情服务器出现异常故障,或者因为网络问题造成数据断线等情况时,监…...

【线性代数的本质】矩阵与线性变换
线性变化要满足两点性质: 直线(连续的点)在变换后还是直线。原点不变。 假设有坐标轴(基底) i ^ \widehat{i} i 和 j ^ \widehat{j} j : i ^ [ 1 0 ] , j ^ [ 0 1 ] \widehat{i}\begin{bmatrix} 1 \…...

CV02_超强数据集:MSCOCO数据集的简单介绍
1.1 简介 MSCOCO数据集,全称为Microsoft Common Objects in Context,是由微软公司在2014年推出并维护的一个大规模的图像数据集,旨在推动计算机视觉领域的研究,尤其是目标识别、目标检测、实例分割、图像描述生成等任务。该数据集…...

Linux--信号(万字详解!超完整!)
目录 0.预备知识 0.1.基本概念 0.2.信号的捕捉 0.3.理解信号的发送与保存 1.信号的产生(阶段一) 1.通过kill命令,向指定进程发送指定的信号 2.通过终端按键产生信号:ctrlc(信号2),ctrl\(…...

onnx模型转rknn到部署
简介 最近开始用3568的板子,之前是在用3399,cpu的话3399比3568强,但是3568有1T的npu算力,所以模型移植过来用npu使用,之前用ncnn感觉太慢了,rk的npu使用没有开源,所以没法兼容,只能跑…...