菜鸡的原地踏步史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);}
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

阶段总结——基于深度学习的三叶青图像识别

阶段总结——基于深度学习的三叶青图像识别 文章目录 一、计算机视觉图像分类系统设计二、训练模型2.1. 构建数据集2.2. 网络模型选择2.3. 图像数据增强与调参2.4. 部署模型到web端2.5. 开发图像识别小程序 三、实验结果3.1. 模型训练3.2. 模型部署 四、讨论五、参考文献&#…

Linux wget报未找到命令

wget报未找到命令需要安装wget 1、下载wget安装文件&#xff0c;本次于华为云资源镜像下载 地址&#xff1a;https://mirrors.huaweicloud.com/centos-vault/7.8.2003/os/x86_64/Packages/ 2、下载后上传到安装服务器/install_package&#xff0c;执行命令安装 rpm -ivh /i…

联合概率密度函数

目录 1. 什么是概率密度由联合概率密度求概率参考链接 1. 什么是概率密度 概率密度到底在表达什么&#xff1f; 外卖在20-40分钟内送达的概率 随机变量落在[20,40]之间的概率。下图中&#xff0c;对总面积做规范化处理&#xff0c;令总面积1&#xff0c; f ( x ) f(x) f(x)则成…

用requirements.txt配置环境

1. 在anaconda创建环境 创建Python版本为3.8的环境&#xff0c;与yolov5所需的包适配。 2. 在Anaconda Prompt中激活环境 (base) C:\Users\吴伊晴>conda activate yolov5 3. 配置环境 用指定路径中的requirements.txt配置环境。 (yolov5) C:\Users\吴伊晴>pip insta…

格式化代码 | 美化JSON、SQL

一、格式化JSON数据 打开Postman&#xff0c;将json数据粘到里面&#xff0c;点击Beautify即可美化代码。 二、格式化SQL 打开Navicat&#xff0c;新建查询&#xff0c;将sql粘进去点击”美化sql“即可。 三、浏览器 在线格式化 使用浏览器上的在线格式化网址。例如&…

使用ChatGPT写论文,只需四步突破论文写作瓶颈!

欢迎关注&#xff0c;为大家带来最酷最有效的智能AI学术科研写作攻略。关于使用ChatGPT等AI学术科研的相关问题可以和作者七哥&#xff08;yida985&#xff09;交流 地表最强大的高级学术AI专业版已经开放&#xff0c;拥有全球领先的GPT学术科研应用&#xff0c;有兴趣的朋友可…

滑动窗口(C++)

文章目录 1、长度最小的子数组2、无重复字符的最长子串3、最大连续1的个数 Ⅲ4、将x减到0的最小操作数5、水果成篮6、找到字符串中所有字母异位词7、串联所有单词的子串8、最小覆盖子串 通常&#xff0c;算法的主体说明会放在第一道题中。但实际上&#xff0c;不通常。 算法在代…

gradle构建工具

setting.gradle // settings.gradle rootProject.name my-project // 指定根项目名称include subproject1, subproject2 // 指定子项目名称&#xff0c;可选jar包名称 方式一 jar {archiveBaseName my-application // 设置 JAR 文件的基本名称archiveVersion 1.0 // 设置…

重载赋值运算符

c编译器可能会给类添加四个函数 1默认构造函数 2默认析构函数 3默认拷贝构造函数&#xff0c;对成员变量进行浅拷贝。 4默认赋值函数&#xff0c;队成员变量进行浅拷贝。 #include<iostream> using namespace std; class CGirl { public:int m_bh;string m_name;voi…

【VUE基础】VUE3第三节—核心语法之computed、watch、watcheffect

computed 接受一个 getter 函数&#xff0c;返回一个只读的响应式 ref 对象。该 ref 通过 .value 暴露 getter 函数的返回值。它也可以接受一个带有 get 和 set 函数的对象来创建一个可写的 ref 对象。 创建一个只读的计算属性 ref&#xff1a; <template><div cl…

3033.力扣每日一题7/5 Java

博客主页&#xff1a;音符犹如代码系列专栏&#xff1a;算法练习关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ 目录 思路 解题方法 时间复杂度 空间复杂度 Code 思路 首先创建一个与…

【C++】unordered系列容器的封装

你很自由 充满了无限可能 这是很棒的事 我衷心祈祷你可以相信自己 无悔地燃烧自己的人生 -- 东野圭吾 《解忧杂货店》 unordered系列的封装 1 unordered_map 和 unordered_set2 改造哈希桶2.1 模版参数2.2 加入迭代器 3 上层封装3.1 unordered_set3.2 unordered_map 4 面…

基于springboot的工作绩效管理系统的设计与实现+文档

&#x1f497;博主介绍&#x1f497;&#xff1a;✌在职Java研发工程师、专注于程序设计、源码分享、技术交流、专注于Java技术领域和毕业设计✌ 温馨提示&#xff1a;文末有 CSDN 平台官方提供的老师 Wechat / QQ 名片 :) Java精品实战案例《700套》 2025最新毕业设计选题推荐…

零基础学习MySQL---库的相关操作

顾得泉&#xff1a;个人主页 个人专栏&#xff1a;《Linux操作系统》 《C从入门到精通》 《LeedCode刷题》 键盘敲烂&#xff0c;年薪百万&#xff01; 一、创建数据库 1.语法 CREATE DATABASE [IF NOT EXISTS] db_name [create_specification [, create_specification] .…

Android 简单快速实现 下弧形刻度尺(滑动事件)

效果图&#xff1a; 直接上代码&#xff1a; package com.my.view;import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Pai…

WordPress付费进群V2主题,多种引流方法,引私域二次变现

全新前端UI界面&#xff0c;多种前端交互特效让页面不再单调&#xff0c;进群页面群成员数&#xff0c;群成员头像名称&#xff0c;每次刷新页面随机更新不重复&#xff0c;最下面评论和点赞也是如此随机刷新不重复 进群页面简介&#xff0c;群聊名称&#xff0c;群内展示&…

UML2.0-系统架构师(二十四)

1、&#xff08;重点&#xff09;系统&#xff08;&#xff09;在规定时间内和规定条件下能有效实现规定功能的能力。它不仅取决于规定的使用条件等因素&#xff0c;还与设计技术有关。 A可靠性 B可用性 C可测试性 D可理解性 解析&#xff1a; 可靠性&#xff1a;规定时间…

ServiceImpl中的参数封装为Map到Mapper.java中查询

ServiceImpl中的参数封装为Map到Mapper.java中查询&#xff0c;可以直接从map中获取到key对应的value

论文阅读【时间序列】DSformer

论文阅读【时间序列】DSformer arxive: DSformer: A Double Sampling Transformer for Multivariate Time Series Long-term Prediction github: MTST 分类&#xff1a;多变量时间序列&#xff08;Multivariate time series&#xff09; 核心观点 多变量时间序列3个维度信息 …

Android AlertDialog对话框

目录 AlertDialog对话框普通对话框单选框多选框自定义框 AlertDialog对话框 部分节选自博主编《Android应用开发项目式教程》&#xff08;机械工业出版社&#xff09;2024.6 在Android中&#xff0c;AlertDialog弹出对话框用于显示一些重要信息或者需要用户交互的内容。 弹出…