LeetCode 热题100(八)【二叉树】(3)

目录
8.11二叉树展开为链表(中等)
8.12从前序与中序遍历序列构造二叉树(中等)
8.13路径总和III(中等)
8.14二叉树的最近公共祖先(中等)
8.15二叉树中的最大路径和(困难)
8.11二叉树展开为链表(中等)
题目描述:leetcode链接 114. 二叉树展开为链表
给你二叉树的根结点
root,请你将它展开为一个单链表:
- 展开后的单链表应该同样使用
TreeNode,其中right子指针指向链表中下一个结点,而左子指针始终为null。- 展开后的单链表应该与二叉树 先序遍历 顺序相同。
示例 1:
输入:root = [1,2,5,3,4,null,6] 输出:[1,null,2,null,3,null,4,null,5,null,6]示例 2:
输入:root = [] 输出:[]示例 3:
输入:root = [0] 输出:[0]
思路:

1.将左、右子树分别变为链表L和R
2.根节点的右节点变为L的根节点,根节点的左节点为空
3.L尾节点的右节点变为R的根节点
举例说明:
见上图
代码:
class Solution {
public:void flatten(TreeNode* root) {if (!root) return;flatten(root -> left);flatten(root -> right);TreeNode* temp = root -> right;root -> right = root -> left;root -> left = nullptr;while(root -> right) root = root -> right;root -> right = temp;}
};
8.12从前序与中序遍历序列构造二叉树(中等)
题目描述:leetcode链接 105. 从前序与中序遍历序列构造二叉树
给定两个整数数组
preorder和inorder,其中preorder是二叉树的先序遍历,inorder是同一棵树的中序遍历,请构造二叉树并返回其根节点。示例 1:
输入: preorder = [3,9,20,15,7], inorder = [9,3,15,20,7] 输出: [3,9,20,null,null,15,7]示例 2:
输入: preorder = [-1], inorder = [-1] 输出: [-1]
思路:

1.由于前序遍历的顺序是【根-左子树-右子树】,中序遍历的顺序是【左子树-根-右子树】,所以由上图的前序遍历preorder可知,它的第一个元素3为根节点。那么由中序遍历inorder可知根节点3的左侧元素为左子树,共1个元素;根节点3的右侧元素为右子树,共3个元素。
2.记录3的左子树的前序遍历顺序和中序遍历顺序,其中9即为3的左节点
记录3的右子树的前序遍历顺序和中序遍历顺序,其中20即为3的右节点
3.记录20的左子树的前序遍历顺序和中序遍历顺序,其中15即为20的左节点
记录20的右子树的前序遍历顺序和中序遍历顺序,其中7即为20的右节点
举例说明:
见上图
代码:
class Solution {
public:unordered_map<int, int> mp;TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {int n = preorder.size();for (int i = 0; i < n; i++) {mp[inorder[i]] = i;}return build(preorder, inorder, 0, n - 1, 0, n - 1);}TreeNode* build(vector<int>& preorder, vector<int>& inorder, int pre_l, int pre_r, int in_l, int in_r) {if (pre_l > pre_r) return nullptr;//前序遍历中的根节点位置int pre_root = pre_l;//中序遍历中的根节点位置int in_root = mp[preorder[pre_root]];TreeNode* root = new TreeNode(preorder[pre_root]);//左子树节点个数int size_l = in_root - in_l;//构造左右子树root -> left = build(preorder, inorder, pre_root + 1, pre_root + size_l, in_l, in_root - 1);root -> right = build(preorder, inorder, pre_root + size_l + 1, pre_r, in_root + 1, in_r);return root;}
};
8.13路径总和III(中等)
题目描述:leetcode链接 437. 路径总和 III
给定一个二叉树的根节点
root,和一个整数targetSum,求该二叉树里节点值之和等于targetSum的 路径 的数目。路径 不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。
示例 1:
输入:root = [10,5,-3,3,2,null,11,3,-2,null,1], targetSum = 8 输出:3 解释:和等于 8 的路径有 3 条,如图所示。示例 2:
输入:root = [5,4,8,11,null,13,4,7,2,null,null,5,1], targetSum = 22 输出:3
思路:
和560. 和为K的子数组类似,使用前缀和+哈希表的方式来解决,只不过我们现在面对的数据是存储在二叉树里面了
注:unordered_map<long, int> mp和long sum的类型为long,要不然有几个测试用例通过不了
举例说明:
无
代码:
class Solution {
public:int ans = 0;unordered_map<long, int> mp;int pathSum(TreeNode* root, int targetSum) {mp[0] = 1;dfs(root, targetSum, 0);return ans;}void dfs(TreeNode* root, int targetSum, long sum) {if (!root) return;sum += root -> val;if (mp.find(sum - targetSum) != mp.end()) ans += mp[sum - targetSum];mp[sum]++;dfs(root -> left, targetSum, sum);dfs(root -> right, targetSum, sum);mp[sum]--;}
};
8.14二叉树的最近公共祖先(中等)
题目描述:leetcode链接 236. 二叉树的最近公共祖先
给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。
百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”
示例 1:
输入:root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1 输出:3 解释:节点5和节点1的最近公共祖先是节点3示例 2:
输入:root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 4 输出:5 解释:节点5和节点4的最近公共祖先是节点5。因为根据定义最近公共祖先节点可以为节点本身。示例 3:
输入:root = [1,2], p = 1, q = 2 输出:1
思路:

按照p、q中一节点是否是另一节点的祖先节点可以分为上图两种情况 。
使用递归,分以下几种情况讨论:
1.如果当前节点为空,或者等于p,或者等于q,返回当前节点
2.如果当前节点左、右子树均不返回空,返回当前节点
3.如果当前节点左子树返回不为空,右子树为空,返回左子树递归结果
4.如果当前节点右子树返回不为空,左子树为空,返回右子树递归结果
5.如果当前节点左、右子树均返回空,返回空
举例说明:

代码:
class Solution {
public:TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {if (!root || root == p || root == q) {return root;}TreeNode* L = lowestCommonAncestor(root -> left, p, q);TreeNode* R = lowestCommonAncestor(root -> right, p, q);if (L && R) return root;return L ? L : R;}
};
8.15二叉树中的最大路径和(困难)
题目描述:leetcode链接 199. 二叉树中的最大路径和
二叉树中的 路径 被定义为一条节点序列,序列中每对相邻节点之间都存在一条边。同一个节点在一条路径序列中 至多出现一次 。该路径 至少包含一个 节点,且不一定经过根节点。
路径和 是路径中各节点值的总和。
给你一个二叉树的根节点
root,返回其 最大路径和 。示例 1:
输入:root = [1,2,3] 输出:6 解释:最优路径是 2 -> 1 -> 3 ,路径和为 2 + 1 + 3 = 6示例 2:
输入:root = [-10,9,20,null,null,15,7] 输出:42 解释:最优路径是 15 -> 20 -> 7 ,路径和为 15 + 20 + 7 = 42
思路:
1.定义一个函数getNum(TreeNode* root),可以计算root节点的贡献值
贡献值可以理解为以该节点为起点,在其子树中寻找一条路径,使其路径和最大
对空节点而言,getNum(NULL)=0
2.以下图为例,
根节点-10的路径和ans(-10)= -10+max(getNum(15), 0)+max(getNum(-5), 0)
遍历所有节点,其中ans的最大值即为二叉树的最大路径和
举例说明:

代码:
class Solution {
public:int ans = INT_MIN;int maxPathSum(TreeNode* root) {getNum(root);return ans;}int getNum(TreeNode* root){if (!root) return 0;int L = max(getNum(root -> left), 0);int R = max(getNum(root -> right), 0);ans = max(ans, root -> val + L + R);return root -> val + max(L, R);}
};
相关文章:
LeetCode 热题100(八)【二叉树】(3)
目录 8.11二叉树展开为链表(中等) 8.12从前序与中序遍历序列构造二叉树(中等) 8.13路径总和III(中等) 8.14二叉树的最近公共祖先(中等) 8.15二叉树中的最大路径和(困…...
uniapp h5实现录音
使用npm安装 npm install recorder-core引入Recorder库 可以使用import、require、html script等你适合的方式来引入js文件,下面的以import为主要参考,其他引入方式根据文件路径自行调整一下就可以了。 //必须引入的Recorder核心(文件路径是…...
字节跳动Android面试题汇总及参考答案(80+面试题,持续更新)
Android 四大组件是什么? Android 四大组件分别是 Activity、Service、Broadcast Receiver 和 Content Provider。 Activity 是 Android 应用中最基本的组件,用于实现用户界面。它可以包含各种视图控件,如按钮、文本框等。一个 Activity 通常对应一个屏幕的内容。用户可以通…...
【go从零单排】通道select、通道timeout、Non-Blocking Channel Operations非阻塞通道操作
🌈Don’t worry , just coding! 内耗与overthinking只会削弱你的精力,虚度你的光阴,每天迈出一小步,回头时发现已经走了很远。 📗概念 select 语句是 Go 的一种控制结构,用于等待多个通道操作。它类似于 s…...
PSRR仿真笔记
1.首先打开bandgap的testbench电路,选择schematic 2.打开电路后,选择VDD模块,然后按键盘Q,进行编辑,将AC magnitude改为1 V 3.修改完成后,点击左上角Launch > ADE Explorer 4.在出现的窗口中,选择Creat…...
AUTOSAR_EXP_ARAComAPI的7章笔记(3)
☞返回总目录 相关总结:AutoSar AP简单多绑定总结 7.3 多绑定 如在 5.4.3 小节中简要讨论的,某个代理类 / 骨架类的不同实例之间的技术传输是不同的,多绑定描述了这种情况的解决方案。多种技术原因都可能导致这种情况出现: 代…...
WSADATA 关键字详细介绍
WSADATA 是 Windows Sockets API(Winsock)中用于存储 Winsock 库的初始化信息的结构体。在使用 Winsock API 之前,必须通过调用 WSAStartup() 函数进行初始化,WSADATA 结构体用于接收有关 Winsock 库版本的信息。Winsock 是 Windo…...
Day44 | 动态规划 :状态机DP 买卖股票的最佳时机IV买卖股票的最佳时机III
Day44 | 动态规划 :状态机DP 买卖股票的最佳时机IV&&买卖股票的最佳时机III&&309.买卖股票的最佳时机含冷冻期 动态规划应该如何学习?-CSDN博客 本次题解参考自灵神的做法,大家也多多支持灵神的题解 买卖股票的最佳时机【…...
Area-Composition模型部署指南
一、介绍 本模型可以通过输入不同的提示词,然后根据各部分提示词进行融合生成图片。如下图: 此图像包含 4 个不同的区域:夜晚、傍晚、白天、早晨 二、部署 环境要求: 最低显存:10G 1. 部署ComfyUI 本篇的模型部署…...
策略模式、状态机详细解读
策略模式 (Strategy Pattern) 策略模式 (Strategy Pattern) 是一种行为型设计模式,旨在将一组算法封装成独立的类,使得它们可以相互替换。这种模式让算法的变化不会影响到使用算法的客户,减少了类之间的耦合。策略模式通常用于处理一类问题&…...
OpenWrt广播DNS到客户端
OpenWrt广播DNS到客户端 Network -> Interfaces -> lan ->DHCP Server -> Advanced Settings -> DHCP-Options 设置 6,dns1,dns2 如下图 也可以直接编辑 /etc/config/dhcp config dhcp lan list dhcp_option 6,119.29.29.29,223.5.5.5 #ipv4 option dns 2402:4…...
C++编程技巧与规范-类和对象
类和对象 1. 静态对象的探讨与全局对象的构造顺序 静态对象的探讨 类中的静态成员变量(类类型静态成员) 类中静态变量的声明与定义(类中声明类外定义) #include<iostream> using namespace std;namespace _nmspl {class A{public:A():m_i(5){…...
AutoHotKey自动热键AHK-正则表达式
在这个软件的操作中,基本都是需要即时的解决一些问题,所以对字符串的操作是比较多的,所以正则的使用还是比较重要的,接下来我们用一个例子来了解正则表达式的使用 str "7654321" RegExMatch(str, "65(43)(21)", SubPat)str ( str %str% SubPat %SubPa…...
【3D Slicer】的小白入门使用指南四
开源解剖影像浏览工具Open Anatomy Browser使用及介绍 和3D slicer米有太大关系,该工具是网页版影像数据的浏览工具(可以简单理解为网页版的3D slicer) 介绍 ● 开放解剖(OA)浏览器是由神经影像分析中心开发的,基于网络浏览器技术构建的图谱查看器。 ● OA浏览器将解剖模…...
flink同步mysql数据表到pg库
1.关闭防火墙和selinux systemctl stop firewalld systemctl disable firewalld systemctl status firewalldvi /etc/selinux/config 修改为disabled2.安装java8 yum list java-1.8* yum install java-1.8.0-openjdk* -yjava -version3.下载和部署postgresql 下载地址&#…...
AndroidStudio-常用布局
一、线性布局LinearLayout 线性布局内部的各视图有两种排列方式: 1.orientation属性值为horizontal时,内部视图在水平方向从左往右排列。 2.orientation属性值为vertical时,内部视图在垂直方向从上往下排列。 如果不指定orientation属性,…...
Vue全栈开发旅游网项目(10)-用户管理后端接口开发
1.异步用户登录\登出接口开发 1.设计公共响应数据类型 文件地址:utils/response404.py from django.http import JsonResponseclass BadRequestJsonResponse(JsonResponse):status_code 400def __init__(self, err_list, *args, **kwargs):data {"error_c…...
[Android]查找java类中声明为native方法的具体实现方法
在android代码中,经常可以看到native方法,需要查看其对应的C方法,这些方法是一一对应的,对应关系是在jni注册里关联起来的。 比较直观的是这样的例子, Parcel.java //Java层的方法里调用了native方法nativeWriteInt…...
Exploring Defeasible Reasoning in Large Language Models: A Chain-of-Thought A
文章目录 题目摘要简介准备工作数据集生成方法实验结论 题目 探索大型语言模型中的可废止推理:思路链 论文地址:http://collegepublications.co.uk/downloads/LNGAI00004.pdf#page136 摘要 许多大型语言模型 (LLM) 经过大量高质量数据语料库的训练&…...
uniapp在app模式下组件传值
在 UniApp 编译成 App 后,传递参数可以通过多种方式实现,常见的方式有以下几种: 1. 通过 URL 参数传递(适用于 WebView) 如果你的 App 页面通过 WebView 渲染,可以像在 Web 端一样通过 URL 传递参数。例如…...
电脑截图工具深度测评:PixPin、Snipaste、兔灵截图(Utools插件)
日常办公、写教程、做笔记,截图是高频刚需。Windows自带截图简陋,截图功能有限,精准标注、长截图、OCR识别等需求,需要专业工具来满足。 本文实测3款「免费无广告、口碑拉满」的截图工具:PixPin、Snipaste、兔灵截图&a…...
全球仅12家顶级艺术机构内部流通的Perplexity知识图谱映射表(含RIS/JSON-LD双格式导出密钥)
更多请点击: https://intelliparadigm.com 第一章:Perplexity艺术知识搜索的范式革命 传统搜索引擎依赖关键词匹配与页面权重排序,在艺术史、当代策展理论、跨媒介创作方法论等高度语境化、隐喻密集的知识领域中,常陷入“查得到却…...
如何在Windows 11上快速安装Android应用?终极APK安装器完全指南 [特殊字符]
如何在Windows 11上快速安装Android应用?终极APK安装器完全指南 🚀 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 还在为Windows上安装Android…...
将Taotoken接入Node.js后端服务,为应用添加智能对话能力
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 将Taotoken接入Node.js后端服务,为应用添加智能对话能力 1. 场景概述:后端服务集成大模型的需求 在开发具…...
避坑指南:STM32 HAL库SPI读写W25Q64时,你可能遇到的时序问题和调试技巧
STM32 HAL库SPI驱动W25Q64实战:时序陷阱与波形诊断全解析 当你的SPI Flash突然开始"装聋作哑",返回的不是预期数据而是清一色的0xFF或0x00时,这往往不是芯片的罢工抗议,而是时序对话中的"鸡同鸭讲"。本文将带…...
FlicFlac音频格式转换工具:Windows平台轻量级音频处理终极指南
FlicFlac音频格式转换工具:Windows平台轻量级音频处理终极指南 【免费下载链接】FlicFlac Tiny portable audio converter for Windows (WAV FLAC MP3 OGG APE M4A AAC) 项目地址: https://gitcode.com/gh_mirrors/fl/FlicFlac 还在为不同设备间的音频格式兼…...
Vidupe:3步快速清理重复视频的终极免费解决方案
Vidupe:3步快速清理重复视频的终极免费解决方案 【免费下载链接】vidupe Vidupe is a program that can find duplicate and similar video files. V1.211 released on 2019-09-18, Windows exe here: 项目地址: https://gitcode.com/gh_mirrors/vi/vidupe 您…...
为什么你的DeepSeek在GCP延迟飙高2000ms?揭秘GPU实例选型、CUDA版本与A100/A100-80GB混部的底层冲突
更多请点击: https://codechina.net 第一章:DeepSeek GCP部署指南 在Google Cloud Platform上部署DeepSeek系列大语言模型(如DeepSeek-V2、DeepSeek-Coder)需兼顾计算性能、存储效率与网络低延迟。本指南基于GCP最新稳定API&…...
YOLO-ONNX-Java分布式推理架构设计与实现
YOLO-ONNX-Java分布式推理架构设计与实现 引言:单机推理的性能瓶颈 在实际的AI视觉识别项目中,随着业务规模的扩大,单机推理往往面临以下挑战: 并发处理能力有限:单台服务器无法同时处理大量视频流GPU资源利用率低&…...
ATxmega时钟与GPIO配置详解:从原理到实战代码
1. 项目概述:从零开始认识ATxmage的时钟与GPIO最近在整理一些嵌入式开发的入门资料,发现很多刚接触ATxmage系列微控制器的朋友,拿到开发板后往往第一步就卡在了最基础的时钟配置和引脚操作上。这其实很正常,因为这两个模块是整个系…...







