Python算法练习 10.23

news2024/12/23 3:10:46

leetcode 1372 二叉树中的最长交错路径

给你一棵以 root 为根的二叉树,二叉树中的交错路径定义如下:

  • 选择二叉树中 任意 节点和一个方向(左或者右)。
  • 如果前进方向为右,那么移动到当前节点的的右子节点,否则移动到它的左子节点。
  • 改变前进方向:左变右或者右变左。
  • 重复第二步和第三步,直到你在树中无法继续移动。

交错路径的长度定义为:访问过的节点数目 - 1(单个节点的路径长度为 0 )。

请你返回给定树中最长 交错路径 的长度。

示例 1:

输入:root = [1,null,1,1,1,null,null,1,1,null,1,null,null,null,1,null,1]
输出:3
解释:蓝色节点为树中最长交错路径(右 -> 左 -> 右)。

示例 2:

输入:root = [1,1,1,null,1,null,null,1,1,null,1]
输出:4
解释:蓝色节点为树中最长交错路径(左 -> 右 -> 左 -> 右)。

示例 3:

输入:root = [1]
输出:0

 常规的深搜题

如果该结点是双亲的左子树,那遍历该结点左子树的时候从0计数,遍历该结点右子树的时候沿用上一层的ZigZag值;反之。

# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution(object):
    def longestZigZag(self, root):
        """
        :type root: TreeNode
        :rtype: int
        """
        def nextLevel(root, lastDirection, maxZigZag):
            maxZigZag += 1
            leftZigZag = rightZigZag = maxZigZag
            if lastDirection == 'L':
                if root.right:
                    rightZigZag = nextLevel(root.right, 'R', maxZigZag)
                if root.left:
                    leftZigZag = nextLevel(root.left, 'L', 0)
                return max(leftZigZag, rightZigZag)
            if lastDirection == 'R':
                if root.left:
                    leftZigZag = nextLevel(root.left, 'L', maxZigZag)
                if root.right:
                    rightZigZag = nextLevel(root.right, 'R', 0)
                return max(leftZigZag, rightZigZag)
        if not root.left and not root.right:
            return 0
        maxZigZag = 0
        leftZigZag = rightZigZag = maxZigZag
        if root.left:
            leftZigZag = nextLevel(root.left, 'L', maxZigZag)
        if root.right:
            rightZigZag = nextLevel(root.right, 'R', maxZigZag)
        return max(leftZigZag, rightZigZag)

 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的公共祖先,p与q的分布则满足三种情况:

  1. p与q一个在左子树中,一个在右子树中
  2. p就是公共祖先,q在其左或右子树中
  3. q就是公共祖先,p在其左或右子树中

通过递归对二叉树进行先序遍历,当遇到节点 p 或 q 时返回。从底至顶回溯,当节点 p,q 在节点 root的异侧时,节点 root即为最近公共祖先,则向上返回 root

class Solution:
    def lowestCommonAncestor(self, root, p, q):
        if root in (None, p, q):
            return root
        left = self.lowestCommonAncestor(root.left, p, q)
        right = self.lowestCommonAncestor(root.right, p, q)
        if left and right:
            return root
        return left or right

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

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

相关文章

数字化可能会用到哪些系统

数字化企业在实施数字化转型过程中,通常会使用多个系统来支持不同的业务需求和功能。以下是一些可能会用到的系统,并对其进行详细介绍: 1. 企业资源计划系统(ERP): 企业资源计划系统是数字化企业的核心系…

东莞理工学院网安学院举办第二届“火焰杯”软件测试高校就业选拔赛颁奖典礼

11月25日下午,由软件测试就业联盟主办的第二届“火焰杯”软件测试高校就业选拔赛颁奖典礼在9A206报告厅隆重举行。网络空间安全学院首次参加该项赛事,共有6位同学参加,全部顺利入围决赛。其中,19软件工程2班梁垧同学获得决赛三等奖…

免费SSL证书的作用及其优势

在互联网时代,保护网站和用户信息的安全至关重要。SSL证书是一种用于加密和保护数据传输的安全技术。本文将探讨免费SSL证书的作用以及它所具备的优势。 点击申请免费证书保护你的网站https://www.joyssl.com/certificate/select/free.html?nid5 一、保护敏感数据…

【接口测试】Jmeter接口实战-TCP及Websocket接口,打通接口测试...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 Jmeter测试TCP接口…

12. 机器学习 - 拟合

Hi, 你好. 我是茶桁. 这一节课一开始我们要说一个非常重要的概念: 拟合. 拟合 相信只要你关注机器学习, 那么多少在某些场合下都会听到拟合这个概念. 什么叫做拟合,什么叫做过拟合或者欠拟合呢? 假如有一个模型, 这个模型在训练数据的时候效果很好, 体现在loss很小, 或者说…

三道MySQL联合索引面试题,你能答对几道?

思考一个问题,联合索引在B树中是怎么存储的? 比如在(a,b)字段上面创建联合索引,存储结构类似下面这样: 数据都是先按a字段排序,a字段的值相等时再按b字段排序。 a字段的值是全局有序的&#x…

使用ngrok内网穿透后,调用相关接口报ERR_NGROK_6024 异常

header增加:ngrok-skip-browser-warning:69420即可。如下图:

容器,Pod,Kubernetes,节点这四个基本概念以及互相之间运用关系,概念、原理解读,以及Pod中特殊pause容器

容器,Pod,Kubernetes,节点这四个基本概念以及互相之间关系,概念、原理解读,以及Pod中特殊pause容器 一. 容器,Pod,Kubernetes,节点这四个基本概念以及互相之间运用关系。 1.1 什么…

7. 矢量图层数据查询选择和保存

文章目录 前言数据查询QGis代码实现获取图层数据的字段QgsField获取图层数据QgsFeature以及QgsAttribute 数据选择QGis代码实现 创建虚拟图层并保存为shape文件QGis代码实现 总结 前言 前几章分别介绍了qgis二次开发环境搭建、整体框架、二次开发初始化、Map canvas、矢量图层…

在 Mac M1 上运行 Llama 2 并进行训练

在 Mac M1 上运行 Llama 2 并进行训练 Llama 2 是由领先的人工智能研究公司 Meta (前Facebook)开发并发布的下一代大型语言模型 (LLM)。 它基于 2 万亿个公共数据 token 进行了预训练,旨在帮助开发人员和企业组织构建基于人工智能的生成工具和…

通过pipeline配置sonar自动化实现过程解析

这篇文章主要介绍了通过pipeline配置sonar自动化实现过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1.sonar配置webhooks, 2.url填写jenkins的地址:http://jenkinsurl/sonarqu…

TensorFlow2从磁盘读取图片数据集的示例(tf.keras.utils.image_dataset_from_directory)

import os import warnings warnings.filterwarnings("ignore") import tensorflow as tf from tensorflow.keras.optimizers import Adam from tensorflow.keras.applications.resnet import ResNet50#数据所在文件夹 base_dir ./data/cats_and_dogs train_dir os…

Docker搭建nacos2.x集群+nginx代理

说明: 如果只需要搭建单节点nacos,请参照我的这篇文章 一、环境准备 资源版本说明docker1.17用于安装nacos及mysql等依赖nacos2.1.1nacosmysql5.6用于数据持久化,本文使用mysql8.0.34 二、安装mysql 说明: 本次安装mysql将以d…

CorelDRAW和InDesign软件的功能区别

Corel和Ilustrator都是基于矢量的排版软件。另一方面,InDesign的主要目的是基于包含不同基本网格设计,以及标题和段落样式信息的母版页来制作多页面布局,例如杂志或书籍,这为了使出版物保持一致。 CorelDRAW图形套件是加拿大Core…

ME1W隐式增强 增加字段学习

需要增加 eina-IDNLF字段 而ME1W中原本是没有的,所以需要改动这个结构 改动后会在这里加入 同时如果程序本身不会输出的话,需要自己加,可以用增强 光标放在 ENHANCEMENT-SECTION 上,然后点击增强按钮 创建完后,你的增强…

【软件测试】自动化测试selenium

目录 一、什么是自动化测试 二、Selenium介绍 1、Selenium是什么 2、Selenium的原理 三、了解Selenium的常用API 1、webDriver API 1.1、元素定位 1.1.1、CSS选择器 1.1.2、Xpath元素定位 1.1.3、面试题 1.2、操作测试对象 1.3、添加等待 1.4、打印信息 1.5、浏览…

数学预备知识

函数篇: 一次函数、反比例函数、二次函数、指数函数、对数函数、幂函数、三角函数、反三角函数、极点坐标等等 初中数学 【a,b】:开区间 (a,b):闭区间 ∞ :无穷大 ∞&#xff1…

webpack类似的工具还有哪些?

一、模块化工具 模块化是一种处理复杂系统分解为更好的可管理模块的方式 可以用来分割,组织和打包应用。每个模块完成一个特定的子功能,所有的模块按某种方法组装起来,成为一个整体(bundle) 在前端领域中,并非只有webpack这一款…

Selenium+Pytest自动化测试框架详解

前言 selenium自动化 pytest测试框架 本章你需要 一定的python基础——至少明白类与对象,封装继承;一定的selenium基础——本篇不讲selenium,不会的可以自己去看selenium中文翻译网 一、测试框架简介 测试框架有什么优点 代码复用率高&…

ZKP6.1 Discrete-log-based Polynomial Commitments (Preliminary)

ZKP学习笔记 ZK-Learning MOOC课程笔记 Lecture 6: Discrete-log-based Polynomial Commitments (Yupeng Zhang) Recall How to build an efficient SNARK? A polynomial commitment scheme A polynomial interactive oracle proof (IOP) SNARK for general circuits Plo…