算法刷题-二叉树3

算法刷题-二叉树 3

116. 填充每个节点的下一个右侧节点指针

给定一个 完美二叉树 ,其所有叶子节点都在同一层,每个父节点都有两个子节点。二叉树定义如下:

struct Node {int val;Node *left;Node *right;Node *next;
}

填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL

初始状态下,所有 next 指针都被设置为 NULL

思路

把当前层的节点都弹出放入列表中,然后遍历列表,使得每个元素的next指向下一个
注意最后一个要指向空:None

代码

class Solution:def connect(self, root: 'Optional[Node]') -> 'Optional[Node]':if not root:return rootqueue = collections.deque([root])while queue:sz = len(queue)ls = []for _ in range(sz):node = queue.popleft()ls.append(node)if node.left:queue.append(node.left)if node.right:queue.append(node.right)for i in range(len(ls) - 1):ls[i].next = ls[i + 1]ls[len(ls) - 1].next = Nonereturn root

117. 填充每个节点的下一个右侧节点指针 II

给定一个二叉树:

struct Node {int val;Node *left;Node *right;Node *next;
}

填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL

初始状态下,所有 next 指针都被设置为 NULL

思路

根上一题的做法一模一样,代码不用变

代码

class Solution:def connect(self, root: 'Node') -> 'Node':if not root:return rootq = collections.deque([root])while q:sz = len(q)ls = []for _ in range(sz):node = q.popleft()ls.append(node)if node.left:q.append(node.left)if node.right:q.append(node.right)for i in range(len(ls)-1):ls[i].next = ls[i+1]ls[len(ls) - 1].next = Nonereturn root

104. 二叉树的最大深度

给定一个二叉树 root ,返回其最大深度。

二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。****

思路

递归:
如果左子树不为空,那么就进入左子树,如果右子树不为空,那么就进入右子树
当前点的深度 为 左/右 递归得到的结果+1

代码

class Solution:def maxDepth(self, root: Optional[TreeNode]) -> int:if not root:return 0l = self.maxDepth(root.left)r = self.maxDepth(root.right)return max(l, r) + 1

111. 二叉树的最小深度

给定一个二叉树,找出其最小深度。

最小深度是从根节点到最近叶子节点的最短路径上的节点数量。

**说明:**叶子节点是指没有子节点的节点。

思路

广度优先搜索,当那一层没有左子树 并且没有右子树的时候,直接返回答案,此时就是最小的深度

代码

class Solution:def minDepth(self, root: Optional[TreeNode]) -> int:if not root:return 0queue = collections.deque([(root, 1)])while queue:node, depth = queue.popleft()if not node.left and not node.right:return depthif node.left:queue.append((node.left, depth + 1))if node.right:queue.append((node.right, depth + 1))return 0

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

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

相关文章

UG NX机械设计软件常见安装问题

UG软件版本这里咱们就不提了,大部分伙伴应该都是钩子激活软件,肯定会遇到或多或少的安装问题,今天这里给大家总结了下,需要的小伙伴自取。 有其他问题可以一起讨论,也希望看到的小伙伴多关注支持哦。 安装UGNX的必要…

如何使用drawio画流程图以及导入导出

画一个基本的流程图 你可以在线使用drawio, 或者drawon创建很多不同类型的图表。 如何使用编辑器,让我们以一个最基本的流程图开始。 流程图,就是让你可视化的描述一个过程或者系统。 图形和很少部分的文字表达就可以让读者很快的理解他们需要什么。 创…

Android 优质的UI组件汇总

1、RuleView :Android自定义标尺控件(选择身高、体重等) 链接:https://github.com/cStor-cDeep/RuleView 2、DashboardView :Android自定义仪表盘View,仿新旧两版芝麻信用分、炫酷汽车速度仪表盘 链接:https://git…

Fabric二进制添加对等节点

目录 一、准备peer11.1、注册peer11.2、登记peer11.3、登记peer1的tls 二、启动peer1三、添加peer1到应用通道四、链码安装和调用 书接上回,在 Fabric二进制建链的基础上,继续通过二进制命令行的方式,添加一个新的对等节点peer1。 一、准备p…

【设计模式】第17节:行为型模式之“解释器模式”

一、简介 解释器模式为某个语言定义它的语法(或者叫文法)表示,并定义一个解释器用来处理这个语法。 二、适用场景 领域特定语言复杂输入解释可扩展的语言结构 三、UML类图 四、案例 对输入的特定格式的打印语句进行解析并执行。 packag…

node使用path模块的基本使用

文章目录 一、path.resolve(常用)二、path.sep三、path.parse其他 一、path.resolve(常用) 由于node 中使用 __dirname 获取的绝对路径是/ ,而我们拼接的路径为‘/’导致路径不统一。 作用:拼接规范的绝对路径 const fs require(fs) const path require(path)// 1…

使用复合机器人有哪些注意事项

随着科技的快速发展,复合机器人在各个领域得到了广泛应用。复合机器人可以完成多种任务,具备高效、精准、灵活等优势。然而,在使用复合机器人时,我们也需要注意一些事项,以确保安全和有效地使用这些机器人。 一、安装要…

怎么让照片内存变小?三个方法轻松搞定!

让照片内存变小可以节省存储空间、提高传输速度、优化图片质量和降低流量消耗等,对于设备性能和用户体验都有积极的影响。下面介绍了三种简单有效的方法,一起来看看吧~ 方法一:通过嗨格式压缩大师压缩照片让内存变小 通过压缩照片&#xff0…

快速了解ClickHouse!

简介 ClickHouse是一个开源列式数据库管理系统(DBMS),用于在线分析处理(OLAP): 列式存储:与传统的行式数据库不同,ClickHouse以列的形式存储数据,这使得在分析大量数据时…

软考之精读真题解析

1、假设系统中有n个进程共享3台打印机,意味着每次只允许3个进程进入互斥段,那么信号量的初值应为3。信号量的范围是3,2,1,0,-1,…,-(n-3)。此时,信号量的物理意义为&…

大长案例 - 经典长连接可水平扩容高可用架构

文章目录 需求设计 需求 支撑百万充电桩充电业务的长连接可水平扩容高可用架构需求如下: 可扩展性:系统应该具备高度可扩展性,能够轻松应对新增充电桩的需求。任何时候都应该容易添加更多的充电桩,而不会影响整体性能。 负载均衡…

网课搜题小程序源码/小猿题库多接口微信小程序源码+自带流量主

网课搜题小程序源码,多接口小猿题库等综合网课搜题微信小程序源码带流量主,网课搜题小程序,可以开通流量主赚钱。 搭建教程 1、微信公众平台注册自己的小程序 2、下载微信开发者工具和小程序的源码 3、上传代码到自己的小程序 下载地址&…

kubesphere部署尚医通

项目架构 yygh-parent |---common //通用模块 |---hospital-manage //医院后台 [9999] |---model //数据模型 |---server-gateway //网关 [80] |---service …

Reading:Deep dive into the OnPush change detection strategy in Angular

原文连接:IndepthApp 今天深入阅读并总结Angualr中onPush更新策略。 1. 两种策略 & whats Lview? Angular 实现了两种策略来控制各个组件级别的更改检测行为。这些策略定义为Default和OnPush: 被定义为枚举: export enum…

Microsoft SQL Server 缓冲区错误漏洞(CVE-2018-8273)解决方法

前言: 在一次漏洞扫描中,扫描出紧急漏洞Microsoft SQL Server 缓冲区错误漏洞(CVE-2018-8273) 根据修复建议找补丁。 一、漏洞详情 二、寻找补丁 根据漏洞修复建议去下载补丁 目前厂商已发布升级补丁以修复漏洞,补丁获取链接:h…

CSS中实现元素居中的几种方法总结

一、使用 text-align: center 居中 使用 text-align: center; 可以在CSS中实现内联元素的水平居中。这个技术利用了CSS的 text-align 属性&#xff0c;通过对元素的文本对齐方式进行调整来实现居中效果。注&#xff1a;只展示主要代码。 <div class"container"&…

Unity-UV展开工具

using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEditor;public class unfold : EditorWindow {[MenuItem("Gq_Tools/展开")]public static void ShowWin(){EditorWindow.CreateInstance<unfold>().Show();}priva…

邮件钓鱼分析

三大协议 SPF Sender Policy Framework 的缩写&#xff0c;一种以IP地址认证电子邮件发件人身份的技术。 注&#xff1a;收信人怀疑币是假的&#xff0c;查看这个送信包裹里面记录的发出地是不是央行&#xff0c;如果是黑市有可能是黑钱 DKIM 加密签名和域名关联。 注&am…

idea插件(二)-- String Manipulation(字符串处理工具)

目录 1. 安装 String Manipulation 2. 默认快捷键 3. 操作说明 3.1 变量名的形式处理 3.2 文本形式的转化

图像二值化阈值调整——OTSU算法(大津法/最大类间方差法)

大津算法&#xff08;OTSU算法&#xff09;是一种常用的图像二值化方法&#xff0c;用于将灰度图像转化为二值图像。该算法由日本学者大津展之于1979年提出&#xff0c;因此得名。 大津算法的核心思想是通过寻找一个阈值&#xff0c;将图像的像素分为两个类别&#xff1a;前景…