代码学习记录17

随想录日记part17

t i m e : time: time 2024.03.12



主要内容:今天的主要内容是二叉树的第六部分,主要涉及二叉搜索树的最小绝对差
;二叉搜索树中的众数;二叉树的最近公共祖先。

  • 530.二叉搜索树的最小绝对差
  • 501.二叉搜索树中的众数
  • 236. 二叉树的最近公共祖先


Topic1二叉搜索树的最小绝对差

题目:

给你一个二叉搜索树的根节点 r o o t root root ,返回 树中任意两不同节点值之间的最小差值 。
差值是一个正数,其数值等于两值之差的绝对值。
示例:
请添加图片描述

输入: r o o t = [ 4 , 2 , 6 , 1 , 3 ] root = [4,2,6,1,3] root=[4,2,6,1,3]
输出: 1 1 1

思路:

把二叉搜索树转换成有序数组,然后遍历一遍数组,就统计出来最小差值:direct/b54a915741f74f9ab515b28243d24f40.gif)
请添加图片描述

总体代码如下:

class Solution {int result = Integer.MAX_VALUE;TreeNode pre;// 记录上个节点public int getMinimumDifference(TreeNode root) {if (root == null)return 0;center_search(root);return result;}private void center_search(TreeNode root) {// 中序遍历if (root == null)return;// 左center_search(root.left);// 中if (pre != null)result = Math.min(result, root.val - pre.val);pre = root;// 右center_search(root.right);}
}


Topic2二叉搜索树中的众数

题目:

给你一个含重复值的二叉搜索树 B S T BST BST 的根节点 r o o t root root ,找出并返回 B S T BST BST 中的所有众数(即出现频率最高的元素)。
如果树中有不止一个众数,可以按任意顺序返回。
假定 BST 满足如下定义:

  • 结点左子树中所含节点的值 小于等于 当前节点的值
  • 结点右子树中所含节点的值 大于等于 当前节点的值
  • 左子树和右子树都是二叉搜索树

请添加图片描述

输入: r o o t = [ 1 , n u l l , 2 , 2 ] ] root = [1,null,2,2]] root=[1,null,2,2]]
输出: [ 2 ] [2] [2]

思路:

既然是搜索树,它中序遍历就是有序的。
如图:
请添加图片描述

总体代码如下: 递归法:

class Solution {// 定义一些辅助数据ArrayList<Integer> resList;int maxCount;int count;TreeNode pre;public int[] findMode(TreeNode root) {resList = new ArrayList<>();maxCount = 0;count = 0;check(root);int[] nums = new int[resList.size()];for (int i = 0; i < resList.size(); i++) {nums[i] = resList.get(i);}return nums;}private void check(TreeNode root) {if (root == null)return;// 左check(root.left);// 中if (pre == null || root.val != pre.val) {count = 1;} else {count++;}if (count > maxCount) {resList.clear();resList.add(root.val);maxCount = count;} else if (count == maxCount) {resList.add(root.val);}pre = root;check(root.right);}
}


Topic3二叉树的最近公共祖先

题目:

给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。
百度百科中最近公共祖先的定义为:“对于有根树 T T T 的两个节点 p 、 q p、q pq,最近公共祖先表示为一个节点 x x x,满足 x x x p 、 q p、q pq 的祖先且 x x x 的深度尽可能大(一个节点也可以是它自己的祖先)。”

示例:
请添加图片描述

输入: r o o t = [ 3 , 5 , 1 , 6 , 2 , 0 , 8 , n u l l , n u l l , 7 , 4 ] , p = 5 , q = 1 root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1 root=[3,5,1,6,2,0,8,null,null,7,4],p=5,q=1
输出: 3 3 3

思路:

后序遍历递归法:
在这里插入图片描述
代码如下:

class Solution {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;if (left != null && right == null)return left;else if (left == null && right != null)return right;elsereturn null;}
}

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

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

相关文章

分布式数据处理MapReduce简单了解

文章目录 产生背景编程模型统计词频案例 实现机制容错机制Master的容错机制Worker的容错机制 产生背景 MapReduce是一种分布式数据处理模型和编程技术&#xff0c;由Google开发&#xff0c;旨在简化大规模数据集的处理。产生MapReduce的背景&#xff1a; 数据量的急剧增长&…

SE园区综合实验(未补齐版)

实验要求&#xff1a; 1.局域网存在vlan10和vlan20两个业务vlan&#xff0c;ip网段分别对应192.168.1.0/24和192.168.2.0/24 2.业务vlan可以在所有链路上传输数据 3.sw1和sw2之间的直连链路上配置静态链路聚合实现链路冗余&#xff0c;并提高链路带宽 4.sw3为某接入点二次交…

windows批处理脚本(cmd指令)

一、简介 最早期的电脑系统是DOS系统&#xff0c;DOS系统只有一个黑漆漆的窗口&#xff0c;需要自己输入命令&#xff0c;所以学习命令是很有必要的&#xff0c;那么CMD命令大全是什么?直到今天的Windows系统&#xff0c;还是离不开DOS命令的操作。如今懂得使用windows批处理脚…

ThreadLocal基本原理

ThreadLocal基本原理 一、定义 ThreadLocal是java中所提供的线程本地存储机制&#xff0c;可以利用改机制将数据缓存在线程内部&#xff0c;该线程可以在任意时刻、任意方法中获取数据 二、底层原理 ThreadLocal底层是通过ThreadLocalMap来实现的&#xff0c;每个Thread对象中…

搭建Docker私有仓库registry

下载registry registry是Docker官方提供的仓库镜像 拉取镜像&#xff0c;不指定版本默认拉取最新版本镜像。 docker pull registry Using default tag: latest latest: Pulling from library/registry 79e9f2f55bf5: Pull complete 0d96da54f60b: Pull complete 5b27040df4…

linux环境基础开发工具2(gcc/g++ 、 make/ Makefile)

目录 Linux编译器-gcc/g使用 Linux项目自动化构建工具-make/Makefile Linux编译器-gcc/g使用 1. 背景知识 1.2 gcc/g -v 查看当前服务器的编译器版本 1.3 安装gcc / g sudo yum install -y gcc-c 1.4 预处理 -> 编译 -> 汇编 -> 链接 [wxqVM-4-9-centos Test]$ to…

cesium wall 扩散墙(动态立体墙效果 Primitive 方法)

cesium wall 扩散墙(动态立体墙效果)以下为源码直接复制可用 1、实现思路 1、此效果运用cesium 中 Primitive 方法,通过传入中心点、半径、顶点数、颜色来进行加载。 2、运用 Math 方法 对传进来的中心点、半径、定点数,来计算个顶点经纬度。 3、通过Primitive 方法中upda…

漏洞复现-锐捷Ruijie系列

漏洞复现-锐捷Ruijie 绕过身份验证锐捷EG易网关 Admin/admin锐捷EG2000GE存在命令执行漏洞锐捷网络股份有限公司校园网自助服务系统存在目录穿越漏洞ruijie-eg-guestisup-ip-rce.yml🗡锐捷RG-UAC应用网关前台RCE数据库审计系统存在后台 downloadTcpDumpFiles⽂件读取锐捷交换…

整数序列删除指定数字,其他数顺序不变

#include <stdio.h>//整数序列删除一个数&#xff0c;其他数顺序不变 int main() {int arr[50] {0};//int arr[50] {1,2,3,4,5};int n 0;int del 0;int i 0;int j 0;scanf("%d",&n);for(i 0;i < n;i)scanf("%d",&arr[i]);scanf(&q…

Win11系统启动VMware上虚拟机蓝屏解决办法

背景 最近有在做一个项目的过程中需要使用虚拟机&#xff0c;用原来装好的的Vmware14打开虚拟机&#xff0c;直接蓝屏了&#xff0c;尝试了如下几种方法来解决&#xff0c;最好用的就是第二种&#xff0c;直接下载最新版本(在软件管家中直接下载)。 虚拟机 目前常用的虚拟机软…

【MySQL】深入解析索引实现原理

文章目录 1、索引介绍2、索引分类2.1、数据结构HashB Tree 2.2、存储方式聚簇索引非聚簇索引 2.3、功能特性主键索引唯一索引普通索引 2.4、字段数量单列索引多列索引 3、最佳实践3.1、索引覆盖3.2、回表操作3.3、最左匹配原则3.4、索引下推 1、索引介绍 对于MySQL数据库来说…

ADCSsync:基于ESC1执行DCSync技术和哈希转储的强大工具

关于ADCSsync ADCSsync是一款功能强大的临时性DCSync技术测试工具&#xff0c;该工具基于ESC1实现其功能&#xff0c;虽然该工具在运行速度方面没有优势&#xff0c;但ADCSsync能够在不使用DRSUAPI或卷影副本的情况下有效地执行临时DCSync攻击技术测试。 ADCSsync使用了ESC1从…