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

LeetCode刷题笔记之二叉树(三)

一、寻找特定节点

1. 404【左叶子之和】

  • 题目: 给定二叉树的根节点 root ,返回所有左叶子之和。
  • 代码:
class Solution {public int sumOfLeftLeaves(TreeNode root) {//左叶子不止是最左边的叶子,而是二叉树中每个节点的左叶子//每棵树的左叶子之和=左子树左叶子之和+右子树左叶子之和//其中,左子树可能是一个叶子节点,它的左叶子之和就是它本身if(root == null) return 0;int leftSum = 0;if(root.left!=null && root.left.left==null && root.left.right==null){leftSum = root.left.val;}else{leftSum = sumOfLeftLeaves(root.left);}int right = sumOfLeftLeaves(root.right);return leftSum+right;}
}

2. 513【找树左下角的值】

  • 题目: 给定一个二叉树的 根节点 root,请找出该二叉树的最底层最左边节点的值。假设二叉树中至少有一个节点。
  • 代码:
class Solution {public int findBottomLeftValue(TreeNode root) {//最底层最左边,也就是层序遍历最后一层的第一个节点Deque<TreeNode> queue = new ArrayDeque<>();queue.offer(root);TreeNode ansNode = root;while (!queue.isEmpty()){int len = queue.size(); //必须提前声明,因为每次循环queue的长度都会变化for (int i = 0; i < len; i++) {TreeNode tempNode = queue.poll();if(i == 0){ansNode = tempNode;}if(tempNode.left != null){queue.offer(tempNode.left);}if(tempNode.right != null){queue.offer(tempNode.right);}}}return ansNode.val;}
}

二、构造二叉树

1. 106【从中序与后序遍历序列构造二叉树】

  • 题目: 给定两个整数数组 inorder 和 postorder ,其中 inorder 是二叉树的中序遍历, postorder 是同一棵树的后序遍历,请你构造并返回这颗 二叉树 。
  • 代码:
class Solution {public TreeNode buildSubTree(int[] inorder,int inStart,int inEnd,int[] postorder,int postStart,int postEnd){//如果后序遍历数组为空,则表示该部分节点构建完成if(postEnd == postStart){return null;}TreeNode root = new TreeNode(postorder[postEnd-1]);int middle;for (middle = inStart; middle < inEnd ; middle++) {if(inorder[middle] == postorder[postEnd-1]){break;}}//注意后续遍历数组的分割点TreeNode leftNode = buildSubTree(inorder,inStart,middle,postorder,postStart,postStart+middle-inStart);TreeNode rightNode = buildSubTree(inorder,middle+1,inEnd,postorder,postStart+middle-inStart,postEnd-1);root.left = leftNode;root.right = rightNode;return root;}public TreeNode buildTree(int[] inorder, int[] postorder) {//已知中序遍历和前序遍历可以确定唯一二叉树//已知中序遍历和后序遍历可以确定唯一二叉树//因为后序遍历为左右根,所以后序遍历数组中最后一个元素为二叉树的根//在中序遍历数组中,根的左边为根的左子树,根的右边为根的右子树//因为中序遍历为左根右,所以在中序遍历中根的左边有n个节点,//在后序遍历中最左边n个节点构成根的左子树if(inorder.length==0 || postorder.length==0) return null;//首先,找到根,根据根划分后序遍历数组//然后,根据后序遍历数组划分中序遍历数组TreeNode root = buildSubTree(inorder,0,inorder.length,postorder,0,postorder.length);return root;}
}

2. 105【从前序与中序遍历序列构造二叉树】

  • 题目: 给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的先序遍历, inorder 是同一棵树的中序遍历,请构造二叉树并返回其根节点。
  • 代码:
class Solution {public TreeNode buildSubTree(int[] preorder,int preStart,int preEnd,int[] inorder,int inStart,int inEnd){if(preEnd == preStart){return null;}TreeNode root = new TreeNode(preorder[preStart]);int middle;for(middle=inStart;middle<inEnd;middle++){if(preorder[preStart] == inorder[middle]){break;}}TreeNode leftNode = buildSubTree(preorder,preStart+1,preStart+1+middle-inStart,inorder,inStart,middle);TreeNode rightNode = buildSubTree(preorder,preStart+1+middle-inStart,preEnd,inorder,middle+1,inEnd);root.left = leftNode;root.right = rightNode;return root;}public TreeNode buildTree(int[] preorder, int[] inorder) {//与上一题相似,只是这里在前序遍历数组由前向后遍历if(preorder.length==0 || inorder.length==0){return null;}return buildSubTree(preorder,0,preorder.length,inorder,0,inorder.length);}
}

3. 654【最大二叉树】

  • 题目: 给定一个不重复的整数数组 nums 。 最大二叉树 可以用下面的算法从 nums 递归地构建:
    (1)创建一个根节点,其值为 nums 中的最大值。
    (2)递归地在最大值 左边 的 子数组前缀上 构建左子树。
    (3)递归地在最大值 右边 的 子数组后缀上 构建右子树。
    (4)返回 nums 构建的 最大二叉树 。
  • 代码:
class Solution {public TreeNode constructMaximumBinaryTree(int[] nums) {//首先,找到最大值,根据最大值划分数组//最大值左边组成左子树,最大值右边组成右子树,最大值构建根//左子树,右子树递归构建//递归时需要传入所有要进行构建树的值,因此需要return constructTree(nums,0,nums.length);}public TreeNode constructTree(int[] nums,int start, int end){if(end <= start){return null;}int max = nums[start];int index = start;for (int i = start; i < end; i++) {if(nums[i]>max){index = i;max = nums[i];}}TreeNode root = new TreeNode(nums[index]);TreeNode leftNode = constructTree(nums,start,index);TreeNode rightNode = constructTree(nums,index+1,end);root.left = leftNode;root.right = rightNode;return root;}
}

4. 617【合并二叉树】

  • 题目: 给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。
  • 代码:
class Solution {public TreeNode mergeTrees(TreeNode root1, TreeNode root2) {//在一棵树的基础上操作,直接加上另一棵树该位置的值,如果为null,值为0//采用前序遍历,终止条件为一棵树遍历完成if(root1 == null) return root2;if(root2 == null) return root1;root1.val = root1.val+root2.val;root1.left = mergeTrees(root1.left,root2.left);root1.right = mergeTrees(root1.right,root2.right);return root1;}
}

相关文章:

LeetCode刷题笔记之二叉树(三)

一、寻找特定节点 1. 404【左叶子之和】 题目&#xff1a; 给定二叉树的根节点 root &#xff0c;返回所有左叶子之和。代码&#xff1a; class Solution {public int sumOfLeftLeaves(TreeNode root) {//左叶子不止是最左边的叶子&#xff0c;而是二叉树中每个节点的左叶子…...

IBM在闪存系统集成实时恶意软件I/O检测功能

IBM在其最新一代FlashCore Modules&#xff08;FCMs&#xff09;固件中集成了使用机器学习进行实时勒索软件和其他攻击检测的功能。这些FCMs是专用于IBM FlashSystem 5000和Storwize阵列的闪存驱动器&#xff0c;采用U.2外形尺寸及NVMe接口。现有的第三代FCMs分别提供4.8、9.6、…...

bpmn-js中实现xml数据转为json数据

开发bpmn-js建模器,希望将bpmn数据格式转为json数据格式更加清晰的展示数据层次,以结果为导向分析需求,实现功能的思路有两种方式: 通过bpmn-js转化为JS数据对象,然后通过JS中提供的JSON模块转换为json数据将xml解析成dom对象,通过dom对象转化为json格式数据三方库这里主…...

HUAWEI Programming Contest 2024(AtCoder Beginner Contest 342)(A,B,C,D,E,F,G)

看不懂的英文&#xff0c;题意很难理解&#xff0c;这场还是有点难度的。 C需要处理&#xff0c;D是不太明显的dijikstra&#xff0c;E是线段树优化dp&#xff0c;F是个不好想的线段树&#xff0c;主席树应该也能做。 我觉得讲的很好的宝藏up主->B站视频讲解。之后会比较忙…...

解决Docker镜像中CentOS 8仓库问题

前言&#xff1a; 在yum执行过程中&#xff0c;持续遇到与CentOS 8上的’appstream’仓库元数据检索相关的错误。具体错误消息为&#xff1a;“错误&#xff1a;下载’appstream’仓库元数据失败&#xff1a;无法准备内部镜像列表&#xff1a;镜像列表中没有URL。” 问题分析&…...

顶顶通呼叫中心中间件-如何使处于机器人话术中的通话手动转接到坐席分机上讲解(mod_cti基于FreeSWITCH)

顶顶通呼叫中心中间件使用httpapi实现电话转接操作过程讲解(mod_cti基于FreeSWITCH) 需要了解呼叫中心中间件可以点以下链接了解顶顶通小孙 1、使用httpapi接口转接 一、打开web版的ccadmin并且找到接口测试 打开web-ccadmin并且登录&#xff0c;登录完成之后点击运维调试-再…...

HarmonyOS—使用数据模型和连接器

Serverless低代码开发平台是一个可视化的平台&#xff0c; 打通了HarmonyOS云侧与端侧能力&#xff0c;能够轻松实现HMS Core、AGC Serverless能力调用。其中&#xff0c;数据模型和连接器是两大主要元素。开发者在使用DevEco Studio的低代码功能进行开发时&#xff0c;可以使用…...

基于MQTT协议实现微服务架构事件总线

一、场景描述 昨天在博客《客户端订阅服务端事件的实现方法》中提出了利用websocket、服务端EventEmitter和客户端mitt实现客户端订阅服务端事件&#xff0c;大大简化了客户端对服务端数据实时响应的逻辑。上述方案适用于单服务节点的情形。 对于由服务集群支撑的微服务架构&…...

免费的Git图形界面工具sourceTree介绍

阅读本文同时请参阅-----代码库管理工具Git介绍 sourceTree是一款免费的Git图形界面工具&#xff0c;它简化了Git的使用过程&#xff0c;使得开发者可以更加方便地下载代码、更新代码、提交代码和处理冲突。下面我将详细介绍如何使用sourceTree进行这些操作。 1.下载和…...

【Appium UI自动化】pytest运行常见错误解决办法

通过Appium工具录制代码在pycharm上运行报错&#xff1a; 错误一&#xff1a; 1.提示 setup() 方法运行 error failed 解决办法&#xff1a;未创建 init __ 方法&#xff0c;创建一个空的__init.py文件就解决了。 原因&#xff1a; 错误二&#xff1a; 2.运行代码&#xff…...

IDEA如何开启Dashboard

普通的面板 Run Dashboard面板 修改配置文件 找到项目的.idea文件夹 点击编辑workspace.xml文件 添加下方代码 <component name"RunDashboard"><option name"ruleStates"><list><RuleState><option name"name" valu…...

【论文复现】——一种新的鲁棒三维点云平面拟合方法

目录 一、算法原理1、论文概述2、参考文献二、代码实现三、结果展示本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的GPT爬虫。 一、算法原理 1、论文概述 针对三维点云中的异常值和粗差点对平面拟合精度产生的影响,文章提出一…...

【C语言】学生宿舍信息管理系统

目录 项目说明 1. 数据结构设计 2. 功能实现 3. 主菜单设计 4. 文件操作 5. 系统使用 项目展示 1.主菜单功能界面 ​编辑 2.添加信息 3.查询信息 4.修改信息 5.删除信息 6.退出程序 项目完整代码 结语 在这篇博客中&#xff0c;我们将探讨如何使用C语言来开发…...

用Python插入页码到PDF文档

页码是许多类型文件中的重要内容&#xff0c;它能方便读者在文档中的导航。在创建PDF文档时&#xff0c;添加页码对于组织和引用内容特别有用。在本文中&#xff0c;我们将探讨如何利用Python程序高效地插入页码到PDF文档中&#xff0c;简化工作流程并创建出精美、结构合理的PD…...

LabVIEW光偏振态转换及检测仿真系统

LabVIEW光偏振态转换及检测仿真系统 随着光学技术的发展&#xff0c;光偏振态的研究与应用越来越广泛。为了深入理解光的偏振现象&#xff0c;开发了一套基于LabVIEW的光偏振态转换及检测仿真系统。该系统不仅能够模拟线偏振光、圆偏振光、椭圆偏振光等不同偏振态的产生与转换…...

scp 本地机和远程机传输文件的方法

在本地机器上&#xff0c;通过ssh连接到远程机器&#xff0c;如果想要在两个机器之间互相传输文件&#xff0c;那么可以使用scp。 scp运行的地方&#xff1a;本地机的终端 样例&#xff1a; 1 将本地文件filename1传输到远程主机的/home/username/filename2目录下 scp -r D:\…...

自定义神经网络二之模型训练推理

文章目录 前言模型概念模型是什么&#xff1f;模型参数有哪些神经网络参数案例 为什么要生成模型模型的大小什么是大模型 模型的训练和推理模型训练训练概念训练过程训练过程中的一些概念 模型推理推理概念推理过程 总结 前言 自定义神经网络一之Tensor和神经网络 通过上一篇…...

Java设计模式:单例模式之六种实现方式详解(二)

在Java中&#xff0c;单例模式是一种常见的设计模式&#xff0c;用于确保一个类只有一个实例&#xff0c;并提供一个全局访问点来获取该实例。单例模式在多种场景下都很有用&#xff0c;比如配置文件的读取、数据库连接池、线程池等。本文将详细介绍Java中实现单例模式的六种方…...

开创5G无线新应用:笙科电子5.8GHz 射频芯片

笙科电子(AMICCOM) 5.8GHz A5133射频芯片是一款专门设计用于在5.8GHz频率范围内&#xff08;5725MHz - 5850MHz)进行射频信号处理的集成电路。这些集成电路通常包括各种功能模块&#xff0c;如射频前端、混合器、功率放大器、局部振荡器等&#xff0c;以支持无线通信系统的各种…...

使用 JMeter 生成测试数据对 MySQL 进行压力测试

博主历时三年精心创作的《大数据平台架构与原型实现&#xff1a;数据中台建设实战》一书现已由知名IT图书品牌电子工业出版社博文视点出版发行&#xff0c;点击《重磅推荐&#xff1a;建大数据平台太难了&#xff01;给我发个工程原型吧&#xff01;》了解图书详情&#xff0c;…...

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...

在软件开发中正确使用MySQL日期时间类型的深度解析

在日常软件开发场景中&#xff0c;时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志&#xff0c;到供应链系统的物流节点时间戳&#xff0c;时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库&#xff0c;其日期时间类型的…...

内存分配函数malloc kmalloc vmalloc

内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...

基于FPGA的PID算法学习———实现PID比例控制算法

基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容&#xff1a;参考网站&#xff1a; PID算法控制 PID即&#xff1a;Proportional&#xff08;比例&#xff09;、Integral&#xff08;积分&…...

云计算——弹性云计算器(ECS)

弹性云服务器&#xff1a;ECS 概述 云计算重构了ICT系统&#xff0c;云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台&#xff0c;包含如下主要概念。 ECS&#xff08;Elastic Cloud Server&#xff09;&#xff1a;即弹性云服务器&#xff0c;是云计算…...

Spring Boot 实现流式响应(兼容 2.7.x)

在实际开发中&#xff0c;我们可能会遇到一些流式数据处理的场景&#xff0c;比如接收来自上游接口的 Server-Sent Events&#xff08;SSE&#xff09; 或 流式 JSON 内容&#xff0c;并将其原样中转给前端页面或客户端。这种情况下&#xff0c;传统的 RestTemplate 缓存机制会…...

iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版​分享

平时用 iPhone 的时候&#xff0c;难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵&#xff0c;或者买了二手 iPhone 却被原来的 iCloud 账号锁住&#xff0c;这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...

基于Uniapp开发HarmonyOS 5.0旅游应用技术实践

一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架&#xff0c;支持"一次开发&#xff0c;多端部署"&#xff0c;可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务&#xff0c;为旅游应用带来&#xf…...

React19源码系列之 事件插件系统

事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...

九天毕昇深度学习平台 | 如何安装库?

pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子&#xff1a; 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...