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

菜鸡的原地踏步史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应用的数据加密与解密技术 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 1. 数据加密与解密的重要性 数据安全是当今互联网应用开发中的重要问题之…...

赛博解压板

目录 开头程序程序的流程图程序的解压效果(暂无&#xff0c;但可以运行一下上面的代码)结尾 开头 大家好&#xff0c;我叫这是我58。今天&#xff0c;我们要看关于赛博解压板的一些东西。 程序 #define _CRT_SECURE_NO_WARNINGS 1 #define ROW 6//ROW表示行数&#xff0c;可…...

微信小程序常用的事件

1.点击事件 WXML 中绑定点击事件&#xff1a; <!-- index.wxml --> <button bindtap"handleTap">点击我</button> 对应的 JS 文件中编写点击事件处理函数&#xff1a; // 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实验

目录 实验目的与要求 实验原理与内容 实验设备与软件环境 实验过程与结果&#xff08;可贴图&#xff09; 操作异常问题与解决方案 实验总结 实验目的与要求 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 更高效准确地把视频内容整体转换成文章?

&#xff08;注&#xff1a;本文为小报童精选文章。已订阅小报童或加入知识星球「玉树芝兰」用户请勿重复付费&#xff09; 让我们来讨论一下大语言模型应用中的一个重要原则 ——「欲速则不达」。 作为一个自认为懒惰的人&#xff0c;我一直有一个愿望&#xff1a;完成视频制作…...

TensorBoard进阶

文章目录 TensorBoard进阶1.设置TensorBoard2.图像数据在TensorBoard中可视化3.模型结构在TensorBoard中可视化&#xff08;重点✅&#xff09;4.高维数据在TensorBoard中低维可视化5.利用TensorBoard跟踪模型的训练过程&#xff08;重点✅&#xff09;6.利用TensorBoard给每个…...

使用AES加密数据传输的iOS客户端实现方案

在现代应用开发中&#xff0c;确保数据传输的安全性是至关重要的。本文将介绍如何在iOS客户端中使用AES加密数据传输&#xff0c;并与服务器端保持加密解密的一致性。本文不会包含服务器端代码&#xff0c;但会解释其实现原理。 加密与解密的基本原理 AES&#xff08;Advance…...

vue3【实战】语义化首页布局

技术要点&#xff0c;详见注释 <script setup></script><template><div class"page"><header>页头</header><nav>导航</nav><!-- 主体内容 --><main class"row"><aside>左侧边栏<s…...

FANG:利用社交网络图进行虚假新闻检测

1.概述 社交媒体已逐渐演变成为公众获取信息的主要途径。然而,值得警惕的是,并非所有流通的信息都具备真实性。特别是在政治选举、疫情爆发等关键节点,带有恶意企图的虚假信息(即“假新闻”)可能会对社会秩序、公平性和理性思考造成严重的干扰。作为全球抗击COVID-19的一部…...

Vue2 基础八电商后台管理项目——中

代码下载 商品分类页 新商品分类组件 goods/Cate.vue&#xff0c;在router.js中导入子级路由组件 Cate.vue&#xff0c;并设置路由规则。 绘制商品分类基本结构 在Cate.vue组件中添加面包屑导航以及卡片视图中的添加分类按钮&#xff1a; <template><div><…...

Typescript window.localStorage 存储 Obj Value区别

window.localStorage.setItem(UserC, JSON.stringify(userC)) const userC JSON.parse(window.localStorage.getItem(UserC) || {}) 不能获得UserC&#xff0c;所有保存的时候需要存储value&#xff0c;而不是对象。 {"__v_isShallow":false, "__v_isRef&quo…...

Linux要解压 .rar 文件,你应该使用 unrar 命令

命令 sudo tar -zxf ~/WebDemo.rar -C /usr/local 有一些问题。tar 命令通常用于解压 .tar、.tar.gz 或 .tar.bz2 文件&#xff0c;而不是 .rar 文件。要解压 .rar 文件&#xff0c;你应该使用 unrar 命令。下面是正确的步骤&#xff1a; 首先&#xff0c;安装 unrar&#xff0…...

【qt】如何获取网卡的信息?

网卡不只一种,有有线的,有无线的等等 我们用QNetworkInterface类的静态函数allInterfaces() 来获取所有的网卡 返回的是一个网卡的容器. 然后我们对每个网卡来获取其设备名称和硬件地址 可以通过静态函数humanReadableName() 来获取设备名称 可以通过静态函数**hardwareAddre…...

使用Netty框架实现WebSocket服务端与客户端通信(附ssl)

仓库地址&#xff1a; https://gitee.com/lfw1024/netty-websocket 导入后可直接运行 预览页面 自签证书&#xff1a; #换成自己的本地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

摘 要 随着社会的进步和信息技术的发展&#xff0c;越来越多的学校开始重视志愿服务工作&#xff0c;通过组织各种志愿服务活动&#xff0c;让学生更好地了解社会、服务社会。然而&#xff0c;在实际操作中&#xff0c;志愿服务的组织和管理面临着诸多问题&#xff0c;如志愿者…...

JVM原理(二):JVM之HotSpot虚拟机中对象的创建寻位与定位整体流程

1. 对象的创建 遇到new指令时 当Java虚拟机遇到一个字节码new指令时。 首先会去检查这个指令的参数是否能在常量池中定位到一个类的符号引用&#xff0c;并且检查这个符号引用代表的类是否被加载、解析和初始化过。 如果没有&#xff0c;那么必须执行类的加载过程(加载、检查…...

Python爬虫实战:研究MechanicalSoup库相关技术

一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...

2024年赣州旅游投资集团社会招聘笔试真

2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...

Nginx server_name 配置说明

Nginx 是一个高性能的反向代理和负载均衡服务器&#xff0c;其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机&#xff08;Virtual Host&#xff09;。 1. 简介 Nginx 使用 server_name 指令来确定…...

C++ 基础特性深度解析

目录 引言 一、命名空间&#xff08;namespace&#xff09; C 中的命名空间​ 与 C 语言的对比​ 二、缺省参数​ C 中的缺省参数​ 与 C 语言的对比​ 三、引用&#xff08;reference&#xff09;​ C 中的引用​ 与 C 语言的对比​ 四、inline&#xff08;内联函数…...

第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明

AI 领域的快速发展正在催生一个新时代&#xff0c;智能代理&#xff08;agents&#xff09;不再是孤立的个体&#xff0c;而是能够像一个数字团队一样协作。然而&#xff0c;当前 AI 生态系统的碎片化阻碍了这一愿景的实现&#xff0c;导致了“AI 巴别塔问题”——不同代理之间…...

【python异步多线程】异步多线程爬虫代码示例

claude生成的python多线程、异步代码示例&#xff0c;模拟20个网页的爬取&#xff0c;每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程&#xff1a;允许程序同时执行多个任务&#xff0c;提高IO密集型任务&#xff08;如网络请求&#xff09;的效率…...

鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南

1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发&#xff0c;使用DevEco Studio作为开发工具&#xff0c;采用Java语言实现&#xff0c;包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...

在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?

uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件&#xff0c;用于在原生应用中加载 HTML 页面&#xff1a; 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...

CSS设置元素的宽度根据其内容自动调整

width: fit-content 是 CSS 中的一个属性值&#xff0c;用于设置元素的宽度根据其内容自动调整&#xff0c;确保宽度刚好容纳内容而不会超出。 效果对比 默认情况&#xff08;width: auto&#xff09;&#xff1a; 块级元素&#xff08;如 <div>&#xff09;会占满父容器…...

JS手写代码篇----使用Promise封装AJAX请求

15、使用Promise封装AJAX请求 promise就有reject和resolve了&#xff0c;就不必写成功和失败的回调函数了 const BASEURL ./手写ajax/test.jsonfunction promiseAjax() {return new Promise((resolve, reject) > {const xhr new XMLHttpRequest();xhr.open("get&quo…...