leetcode尊享面试——二叉树(python)

250.统计同值子树

使用dfs深度搜索,同值子树,要满足三个条件:

对于当前节点node,他的左子树血脉纯净(为同值子树),右子树血脉纯净(为同值子树),node的值等于左右子树节点的值。

全是if判断,推理!!!

class Solution:
    def countUnivalSubtrees(self, root: Optional[TreeNode]) -> int:
        n, b = self.dfs(root)
        return n
    
    def dfs(self, root):
        if not root: return 0, True
        n = 0
        b = True
        n1, b1 = self.dfs(root.left)
        n2, b2 = self.dfs(root.right)
        n = n1 + n2
        if not b1 or not b2:
            b = False
        if root.left and root.left.val != root.val:
            b = False
        if root.right and root.right.val != root.val:
            b = False
        if b: n += 1
        return n, b

1120.子树的最大平均值

使用dfs, 返回以root为根的所以节点的总和,节点数量。

没有任何技巧,全是感情!!!

class Solution:
    def __init__(self):
        self.m = 0

    def maximumAverageSubtree(self, root: Optional[TreeNode]) -> float:
        self.dfs(root)
        return self.m

    def dfs(self, root):
        # 返回以root为根的所以节点的总和,节点数量
        if not root: return 0, 0
        s1, c1 = self.dfs(root.left)
        s2, c2 = self.dfs(root.right)
        s = s1 + s2 + root.val
        c = c1 + c2 + 1
        self.m = max(self.m, s/c)
        return s, c

545.二叉树的边界

 可以把题目分成三个问题,使用三个dfs解决,可以发现左边界和右边界很相似,dfs传入一个idx判断是先从左走还是先从右走,另外题目说:根节点 不是 叶节点。但是数据中存在只有一个节点的情况需要注意。

class Solution:
    def __init__(self):
        self.leaf = []

    def boundaryOfBinaryTree(self, root: Optional[TreeNode]) -> List[int]:
        if not root.left and not root.right: return [root.val]
        ans = []
        if root.left:
            l = self.find_ls(root, 0)
            ans += l
        else:
            ans = [root.val]
        self.find_leaf(root)
        ans += self.leaf
        if root.right:
            r = self.find_ls(root, 1)
            ans += r[::-1]
            ans.pop()
        return ans

    def find_ls(self, root, idx):
        ans = [root.val]
        if idx == 1:
            root.left, root.right = root.right, root.left
        if root.left:
            ans += self.find_ls(root.left, idx)
        elif root.right:
            ans += self.find_ls(root.right, idx)
        else:
            return []
        return ans

    def find_leaf(self, root):
        if root.left:
            self.find_leaf(root.left)
        if root.right:
            self.find_leaf(root.right)
        if not root.left and not root.right:
            self.leaf.append(root.val)

366.寻找二叉树的叶子节点

任然使用dfs深度搜索,记录每一层的位置,然后在ans相应位置中插入

class Solution:
    def __init__(self):
        self.length = 0
        self.ans = []

    def findLeaves(self, root: Optional[TreeNode]) -> List[List[int]]:
        self.dfs(root)
        return self.ans

    def dfs(self, root):
        if not root: return 0
        n1 = self.dfs(root.left)
        n2 = self.dfs(root.right)
        n = max(n1, n2)
        if self.length - 1 < n:
            self.length += 1
            self.ans.append([])
        self.ans[n].append(root.val)
        return n + 1

还能补充知识吗!!!我的大脑🧠

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Qt 6.7 正式发布!

本文翻译自&#xff1a;Qt 6.7 Released! 原文作者&#xff1a;Qt Group研发总监Volker Hilsheimer 在最新发布的Qt 6.7版本中&#xff0c;我们大大小小作出了许多改善&#xff0c;以便您在构建现代应用程序和用户体验时能够享受更多乐趣。 部分新增功能已推出了技术预览版&a…

MySQL系列之MySQL 存储引擎

&#x1f339;作者主页&#xff1a;青花锁 &#x1f339;简介&#xff1a;Java领域优质创作者&#x1f3c6;、Java微服务架构公号作者&#x1f604; &#x1f339;简历模板、学习资料、面试题库、技术互助 &#x1f339;文末获取联系方式 &#x1f4dd; 往期热门专栏回顾 专栏…

【LeetCode】环形链表I 环形链表II

一、环形链表I 题目 思路 该题使用快慢指针 slow、 fast slow 走一步 &#xff0c;fast 走两步 当fast 走到空 或者 fast的下一个结点为空&#xff0c; 则无环 fast若追上slow &#xff0c; 则有环 结论证明 该思路默认了 &#xff1a; 若存在环形链表 &#xff0c; 无论…

文件夹批量重命名:文件夹名称编号实战,快速实现文件分类与整理

随着电脑中存储的文件日益增多&#xff0c;如何有效地管理和组织这些文件成为了许多用户面临的一大挑战。文件夹批量重命名是一种非常实用的技巧&#xff0c;它可以帮助我们快速实现文件的分类与整理&#xff0c;使文件存储更加有序、高效。 为什么需要文件夹批量重命名&#x…

IP SSL证书申请教程:实现HTTPS加密访问

随着网络安全意识的提高&#xff0c;HTTPS加密访问已经成为网站安全性的重要标准。通过安装SSL证书&#xff0c;网站可以实现数据的加密传输&#xff0c;有效保护用户隐私和数据安全。本文将详细介绍如何为IP地址申请SSL证书&#xff0c;并实现HTTPS加密访问。 一、准备工作 …

Kaggle入门-泰坦尼克号数据及代码

本文讲述了kaggle入门级别的竞赛&#xff1a;泰坦尼克号&#xff0c;有提及如何下载数据&#xff0c;附带有思路和代码解析 前言 我个人还是喜欢直接在kaggle运行&#xff0c;但是有人不能科学上网呀 数据 在找到泰坦尼克号比赛里&#xff0c;创建一个notebook&#xff0c;然…

Excel Module: Iteration #1 EasyExcel生成下拉列表模版时传入动态参数查询下拉数据

系列文章 EasyExcel生成带下拉列表或多级级联列表的Excel模版自定义校验导入数据(修订) 目录 系列文章前言仓库一、实现1.1 下拉元数据对象1.2 构建下拉元数据的映射关系1.3 框架方式1.3.1 框架实现1.3.2 框架用例模版类加载下拉业务导出接口 1.4 EasyExcel方式1.4.1 EasyExce…

数据仓库与数据挖掘实验练习3-4(实验二2024.5.8)

练习3 1.简单文件操作练习 import pandas as pd # 读取文件 pd.read_csv(pokemon.csv) # 读取 CSV 文件的函数调用&#xff0c;它将文件中的数据加载到 DataFrame 中&#xff0c;并指定了 Pokemon 列作为索引列。 pd.read_csv(pokemon.csv,index_colPokemon)#查看类型 type(p…

UE5材质基础(2)——数学节点篇1

UE5材质基础&#xff08;2&#xff09;——数学节点篇1 目录 UE5材质基础&#xff08;2&#xff09;——数学节点篇1 Add节点 Append节点 Abs节点 Subtract节点 Multiply节点 Divide节点 Clamp节点 Time节点 Lerp节点 Add节点 快捷键&#xff1a;A鼠标左键 值相加…

智慧安监中的物联网主机E6000

物联网主机E6000的研发背景主要源于我国对物联网技术在安全生产、环境监测、火灾预警与防控、人员定位与紧急救援等领域的迫切需求。近年来&#xff0c;随着物联网技术的飞速发展&#xff0c;我国政府对智慧安监的重视程度不断提升&#xff0c;相关的政策扶持力度也在加大。在这…

Ansible--Templates 模块 Tags模块 Roles模块

一 Templates 模块 ①Jinja是基于Python的模板引擎。Template类是Jinja的一个重要组件&#xff0c;可看作一个编译过的模 板文件&#xff0c;用来产生目标文本&#xff0c;传递Python的变量给模板去替换模板中的标记。 ②在配置文件中&#xff0c;会有一些数据&#xff08;如…

CCF-Csp算法能力认证, 202212-1现值计算(C++)含解析

前言 推荐书目&#xff0c;在这里推荐那一本《算法笔记》&#xff08;胡明&#xff09;&#xff0c;需要PDF的话&#xff0c;链接如下 「链接&#xff1a;https://pan.xunlei.com/s/VNvz4BUFYqnx8kJ4BI4v1ywPA1?pwd6vdq# 提取码&#xff1a;6vdq”复制这段内容后打开手机迅雷…

前端双语实现方案(VUE版)

一、封装一个lib包 结构如下 en.js use strict;exports.__esModule true; exports.default {sp: {input: {amountError: Incorrect amount format},table: {total: Total:,selected: Selected:,tableNoData: No data,tableNoDataSubtext: Tip: Suggest to recheck your fil…

LeetCode 110. 平衡二叉树

LeetCode 110. 平衡二叉树 1、题目 题目链接&#xff1a;110. 平衡二叉树 给定一个二叉树&#xff0c;判断它是否是 平衡二叉树 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;true示例 2&#xff1a; 输入&#xff1a;root [1,2…

AI写作助手:推荐顶级论文写作工具

ChatGPT生成内容需要注意的问题 永远不要直接提交未经修改的AI文本使用工具如Quillbot、Versabot(支持中文论文生成和润色)、Paraphrasing Tool和Jasper来改变文本的措辞亲自修改短语、句子和文本的其他元素提示ChatGPT重新写自己的文本&#xff0c;并通过多个草稿进行修订 Ch…

如何把多个文件(夹)向上移动1层(或多层)(在批量复制前或后进行)

首先&#xff0c;需要用到的这个工具&#xff1a; 度娘网盘 提取码&#xff1a;qwu2 蓝奏云 提取码&#xff1a;2r1z 假定情况是&#xff0c;我要把下图里的4个文件夹内部的全部文件&#xff0c;合并到04的当前位置来&#xff08;4个文件夹里面各有5个兔兔的图片&#xff09…

【吃透Java手写】2-Spring(下)-AOP-事务及传播原理

【吃透Java手写】Spring&#xff08;下&#xff09;AOP-事务及传播原理 6 AOP模拟实现6.1 AOP工作流程6.2 定义dao接口与实现类6.3 初始化后逻辑6.4 原生Spring的方法6.4.1 实现类6.4.2 定义通知类&#xff0c;定义切入点表达式、配置切面6.4.3 在配置类中进行Spring注解包扫描…

华为ensp中BFD和OSPF联动(原理及配置命令)

作者主页&#xff1a;点击&#xff01; ENSP专栏&#xff1a;点击&#xff01; 创作时间&#xff1a;2024年5月6日20点26分 BFD通常指的是双向转发检测。BFD是一个旨在快速检测通信链路故障的网络协议&#xff0c;提供了低开销、短延迟的链路故障检测机制。它主要用于监测两个…

start.spring.io不支持java8,idea使用阿里云又报错

做项目的时候&#xff0c;我们可以发现&#xff0c;访问https://start.spring.io/ 创建脚手架项目的时候&#xff0c;最低是java 17了 但是对于很多项目来说&#xff0c;还是在用java8&#xff0c;这该怎么办呢&#xff1f; 值得庆幸的是&#xff0c;阿里云也同样有相同功能的…

VASP_AIMD+VASPKIT计算含温力学性质

材料的力学性质一直是DFT计算的重要方向&#xff0c;笔者在以往已有针对于静态结构的力学性质诸如弹性常数的相关计算&#xff0c;同时可通过VASPKIT借助相关方程导出力学性能。 bashvaspvaspkit能量应变计算弹性常数 vaspkit计算弹性常数的对称性指定 vaspkit计算弹性常数脚…