力扣爆刷第92天之hot100五连刷46-50

力扣爆刷第92天之hot100五连刷46-50

文章目录

      • 力扣爆刷第92天之hot100五连刷46-50
      • 一、114. 二叉树展开为链表
      • 二、105. 从前序与中序遍历序列构造二叉树
      • 三、437. 路径总和 III
      • 四、236. 二叉树的最近公共祖先
      • 五、124. 二叉树中的最大路径和

一、114. 二叉树展开为链表

题目链接:https://leetcode.cn/problems/flatten-binary-tree-to-linked-list/description/?envType=study-plan-v2&envId=top-100-liked
思路:采用后序遍历,然后把当前节点的左子树赋值给右孩子,然后将右孩子复制给左子树最右边的右孩子,左子树最右下角的节点是左子树最后遍历的位置,那么root的右子树理应接在这个位置。

class Solution {public void flatten(TreeNode root) {if(root == null) return;flatten(root.left);flatten(root.right);TreeNode left = root.left;TreeNode right = root.right;root.left = null;root.right = left;TreeNode p = root;while(p.right != null) {p = p.right;}p.right = right;}
}

二、105. 从前序与中序遍历序列构造二叉树

题目链接:https://leetcode.cn/problems/construct-binary-tree-from-preorder-and-inorder-traversal/description/?envType=study-plan-v2&envId=top-100-liked
思路:使用map减少检索根节点在中序遍历中位置的时间,然后利用前序中根节点的位置,与中序中根节点的位置,以及中序中左边界到根节点的距离,不断的递归划分数组构造二叉树。

class Solution {Map<Integer, Integer> map = new HashMap<>();public TreeNode buildTree(int[] preorder, int[] inorder) {for(int i = 0; i < inorder.length; i++) {map.put(inorder[i], i);}return createTree(preorder, inorder, 0, preorder.length-1, 0, inorder.length-1);}TreeNode createTree(int[] preorder, int[] inorder, int left1, int right1, int left2, int right2) {if(left1 > right1 || left2 > right2) return null;TreeNode root = new TreeNode();int mid = preorder[left1];root.val = mid;int indexO = map.get(mid);root.left = createTree(preorder, inorder, left1+1, left1+indexO-left2, left2, indexO-1);root.right = createTree(preorder, inorder, left1+indexO-left2+1, right1, indexO+1, right2);return root;}
}

三、437. 路径总和 III

题目链接:https://leetcode.cn/problems/path-sum-iii/description/?envType=study-plan-v2&envId=top-100-liked
思路:只要求路径总和其实都可以考虑前缀和,本题更加适合前缀和,要求求和的节点只能一路往下,不能出现向上向下这种,那么在前缀和的构造过程中,单节点向左向右都是回溯的进入过程,当左右节点都处理完后,即为回溯的返回过程,这时需要去掉添加的前缀和,避免出现向上向下的节点片段。

class Solution {Map<Long, Integer> map = new HashMap<>();public int pathSum(TreeNode root, int targetSum) {map.put(0L, 1);return preSum(root, 0L, targetSum);}int preSum(TreeNode root, Long cur, int targetSum) {if(root == null) return 0;int res = 0;cur += root.val;res = map.getOrDefault(cur - targetSum, 0);map.put(cur, map.getOrDefault(cur, 0)+1);res += preSum(root.left, cur, targetSum);res += preSum(root.right, cur, targetSum);map.put(cur, map.getOrDefault(cur, 0)-1);return res;}
}

四、236. 二叉树的最近公共祖先

题目链接:https://leetcode.cn/problems/lowest-common-ancestor-of-a-binary-tree/description/?envType=study-plan-v2&envId=top-100-liked
思路:先序遍历,遇到相等节点返回,如果左右节点都返回值,则父节点就是最近公共祖先,否则就是左右节点返回的不为空的那一个。

class Solution {public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {if(root == null) return null;if(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;return left != null ? left : right;}
}

五、124. 二叉树中的最大路径和

题目链接:https://leetcode.cn/problems/binary-tree-maximum-path-sum/description/?envType=study-plan-v2&envId=top-100-liked
思路:求二叉树中的最大路径和这种问题,采用后序遍历,自下而上的记录累加和,采用贪心的思想,左右子树提供的和必须得大于零才会被使用,然后记录下最大值,向父节点提供值只能是单边路径。

class Solution {int max = Integer.MIN_VALUE;public int maxPathSum(TreeNode root) {order(root);return max;}int order(TreeNode root) {if(root == null) return 0;int left = Math.max(order(root.left), 0);int right = Math.max(order(root.right), 0);int cur = left + right + root.val;max = Math.max(max, cur);return root.val + Math.max(left, right);}
}

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

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

相关文章

JAVA实战开源项目:学生日常行为评分管理系统(Vue+SpringBoot)

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、系统设计2.1 功能模块设计2.2.1 登录注册模块2.2.2 用户管理模块2.2.3 评分项目模块2.2.4 评分数据模块2.2.5 数据字典模块 2.3 可行性设计2.4 用例设计2.5 数据库设计2.5.1 整体 E-R 图2.5.2 用户2.5.3 评分项目2.5.4 评分数据2.5.…

弹性盒子布局 Flexbox Layout

可以嵌套下去 1.display 属性 默认行排列 <style>.flex-item{ height: 20px;width: 10px;background-color: #f1f1f1;margin: 10px;}</style> </head> <body> <div class"flex-container"><div class"flex-item">1&l…

功能测试转自动化测试好不好转型?

手工测试做了好多年&#xff0c;点点点成了每天必须做的事情。但是随着自动化测试趋势的日渐明显&#xff0c;以及受到薪资、技能的双重考验&#xff0c;掌握自动化测试成为了必备技能。 手工转自动化测试&#xff0c;不是一蹴而就的。“预先善其事&#xff0c;必先利其器”&a…

DAMA考试知识点笔记

数据管理的定义: 数据管理是为了交付、控制、保护并提升数据和信息资产的价值&#xff0c;在其整个生命周期中制定计划、制度、规程和实践活动&#xff0c;并执行和监督的过程。 数据管理专业人员的定义: 是指从事数据管理各方面的工作(从数据全生命周期的技术管理工作&#x…

Android Jetpack:概述、优劣分析及其应用场景探索

一、引言 随着移动应用程序市场的不断发展&#xff0c;开发者面临着日益增长的竞争压力。为了提高开发效率和应用程序质量&#xff0c;谷歌推出了Android Jetpack&#xff0c;一套组件库、工具和指南&#xff0c;旨在帮助开发者更轻松地构建出色的Android应用程序。本文将对And…

C++:2024/3/11

作业1&#xff1a;编程 要求&#xff1a;提示并输入一个字符串&#xff0c;统计该字符中大写、小写字母个数、数字个数、空格个数以及其他字符个数 代码&#xff1a; #include <iostream>using namespace std;int main() {string str;cout << "请输入一个字…

二叉树习题详解

LCR 046. 二叉树的右视图 - 力扣&#xff08;LeetCode&#xff09; 用t来记录每层节点个数&#xff0c;每次队列第一个数都是最右边的数。 class Solution { public:vector<int> rightSideView(TreeNode* root) {if(rootNULL) return {};queue<TreeNode*>q;vecto…

linux查看文件内容cat,less,vi,vim

学习记录 目录 catlessvi vim cat 输出 FILE 文件的全部内容 $ cat [OPTION] FILE示例 输出 file.txt 的全部内容 $ cat file.txt查看 file1.txt 与 file2.txt 连接后的内容 $ cat file1.txt file2.txt为什么名字叫 cat&#xff1f; 当然和猫咪没有关系。 cat 这里是 co…

一款功率电子开关TP6062

一、基本概述 The TP606X is a low voltage,single P-MOSFET high-side power switch, optimized for self-powered and bus-powered Universal Serial Bus (USB) applications. This switch operates with inputs ranging from 2.4V to 5.5V, making it ideal for both 3V a…

封装方法3-2

八大数据类型一次只能代表一个&#xff0c;所以不能作为返回值&#xff0c; 数组可以做为返回值&#xff0c;把excel的内容2行11列当作数组&#xff0c;存在二维数据里 处理ecxel-22个单元值的返回结果写什么&#xff1f; 1、认识二维数组是什么&#xff1f; 数 组&#xff…

Ping工作原理

文章目录 目的ping网络协议 OSIICMP什么是ICMP作用功能报文类型查询报文类型差错报文类型ICMP 在 IPv4 和 IPv6 的封装ICMP 在 IPv4 协议中的封装ICMP 在 IPv6 协议中的封装ICMP 头部日常ping 排除步骤ping 查询报文使用code扩展目的 本文主要是梳理ping的工作原理- 揭开 ICMP…

开淘宝店保证金怎么交

对于想要在淘宝上开店的人来说&#xff0c;交纳保证金是必要的一步。保证金是淘宝平台为了保障买家权益而要求卖家缴纳的一笔款项&#xff0c;用于确保卖家在经营过程中遵守淘宝规则&#xff0c;并对买家负责。那么&#xff0c;开淘宝店保证金怎么交呢&#xff1f;下面就为大家…

Java 解析常见文本文件数据

文章目录 前言简介第一步&#xff1a;引入依赖第二步&#xff1a;编写文件解析处理类第三步&#xff1a;Word解析类第四步&#xff1a;PDF解析类第五步&#xff1a;Txt解析类总结 前言 请各大网友尊重本人原创知识分享&#xff0c;谨记本人博客&#xff1a;南国以南i、 提示&a…

python开发100问?

Python是什么&#xff1f;它有什么特点&#xff1f;Python的历史是什么样的&#xff1f;Python有哪些应用领域&#xff1f;Python的基本数据类型有哪些&#xff1f;Python中的变量命名规则是什么&#xff1f;如何在Python中进行注释&#xff1f;Python中的缩进是什么意思&#…

C++初学

1>思维导图 2>试编程 提示并输入一个字符串&#xff0c;统计该字符中大写、小写字母个数、数字个数、空格个数以及其他字符个数要求使用C风格字符串完成 #include <iostream> #include<string.h> using namespace std;int main() {string str;cout <<…

Hive-源码分析一条hql的执行过程

一、源码下载 下面是hive官方源码下载地址&#xff0c;我下载的是hive-3.1.3&#xff0c;那就一起来看下吧 https://dlcdn.apache.org/hive/hive-3.1.3/apache-hive-3.1.3-src.tar.gz 二、上下文 <Hive-源码带你看hive命令背后都做了什么>博客中已经讲到了hive命令执行…

消息队列中间件

1.什么是消息队列? 消息队列&#xff0c;我们一般称为MQ&#xff08;Message Queue&#xff09;。 很多初学者认为MQ通过消息的发送和接受来实现程序的异步和解耦&#xff0c;但是实际上MQ的主要目的是通讯。 MQ定义了发送者为生产者&#xff0c;接收消息的那一方为消费者。…

网络工程师笔记11

OSPF协议 priority越大越优先&#xff0c;缺省值是1&#xff0c;范围是0-255 routerID越大越优先&#xff0c;先比较优先值&#xff0c;后比较RouterID 非骨干区域必须要跟骨干区域相连&#xff0c;非骨干区域不能直接通信&#xff0c;必须经过骨干区域 OSPF配置 配置routerID划…

20240308-使用VS2022编译VLD-v2.5.4内存泄漏工具

20240308-使用VS2022编译VLD-v2.5.4内存泄漏工具 一、软件环境 Win10 x64 22h2 JuneVS2022 v17.9.0GIT v2.29.2标签&#xff1a;win10 22h2 vs2022分栏&#xff1a;C 二、硬件环境 Win10 x64的PC台式机 三、获取源码 方法一 git clone https://gitee.com/gdnh22/vld254.…

解决 Webpack 中 ERROR in main Module not found: Error: Can‘t resolve ‘./src‘ 问题

出自 BV1MN411y7pw&#xff0c; P98 黑马AJAX-Node.js-Webpack教学视频中webpack部分&#xff0c;打包的时候出错 ERROR in main Module not found: Error: Cant resolve ./src in V:\Web\mycode\webpack\01_webpack_use resolve ./src in V:\Web\mycode\webpack\01_webpack_us…