Day 14 卡玛笔记

这是基于代码随想录的每日打卡

226. 翻转二叉树

给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。

示例 1:

img

输入:root = [4,2,7,1,3,6,9]
输出:[4,7,2,9,6,3,1]

示例 2:

img

输入:root = [2,1,3]
输出:[2,3,1]

示例 3:

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

递归法(前序、后序)

思路

二叉树的前中后序遍历的操作是将遍历到的节点存进数组,换一步想,将这个操作换成交换左右孩子不就可以了?

代码

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
# 前序遍历
class Solution:   def invertTree(self, root: Optional[TreeNode]) -> Optional[TreeNode]:# 如果根节点为None直接返回if root==None:return root# 递归函数def invert(node):# 空节点直接返回上一层if node==None:return# 交换节点node.left,node.right=node.right,node.leftinvert(node.left)invert(node.right)invert(root)return root# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
# 后序遍历
# class Solution:
#     def invertTree(self, root: Optional[TreeNode]) -> Optional[TreeNode]:
#         if root==None:
#             return root
#         def invert(node):
#             if node==None:
#                 return            
#             invert(node.left)
#             invert(node.right)
#             node.left,node.right=node.right,node.left
#         invert(root)
#         return root

运行结果

在这里插入图片描述



递归法(伪中序)

为什么叫伪中序呢?因为真正的中序是翻转不了二叉树的。中序的遍历顺序的左中右,以下面二叉树为例:

在这里插入图片描述

若是中序遍历,第一次翻转时将翻转9和6

在这里插入图片描述

第二次遍历将翻转4的左右孩子

在这里插入图片描述

下一步就需要翻转4的右孩子,7了,可是第一步我们才刚刚翻转过,所以采用中序遍历会导致乱序,但是我们可以换一步想:将左中右换成左中左的遍历顺序不就可以了吗

代码

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:def invertTree(self, root: Optional[TreeNode]) -> Optional[TreeNode]:if root==None:return rootdef invert(node):if node==None:returninvert(node.left)node.left,node.right=node.right,node.leftinvert(node.left)invert(root)return root

运行结果

在这里插入图片描述



101. 对称二叉树

给你一个二叉树的根节点 root , 检查它是否轴对称。

示例 1:

输入:root = [1,2,2,3,4,4,3]
输出:true

示例 2:

img

输入:root = [1,2,2,null,3,null,3]
输出:false

递归法

代码

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:def isSymmetric(self, root: Optional[TreeNode]) -> bool:# 没根节点也是对称if root==None:return Truedef compare(left,right):# 递归终止条件if left==None and right:return Falseif left and right==None:return Falseif left==None and right==None:return Trueif left.val != right.val:return False# 递归逻辑bool1=compare(left.left,right.right)bool2=compare(left.right,right.left)return bool1 and bool2# 传入根节点的左后孩子return compare(root.left,root.right)

运行结果

在这里插入图片描述


104. 二叉树的最大深度

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

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

示例 1:

img

输入:root = [3,9,20,null,null,15,7]
输出:3

示例 2:

输入:root = [1,null,2]
输出:2

递归法

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:def maxDepth(self, root: Optional[TreeNode]) -> int:# 这里用的是后序遍历def getdepth(node):if node==None:return 0leftheight=getdepth(node.left)rightheight=getdepth(node.right)# 为什么是1加最大值?# 当节点为叶子节点时,叶子节点的左右孩子返回1+0=1,也就是说叶子节点的高度为1height=1+max(leftheight,rightheight)# 返回高度给上一层return heightreturn getdepth(root)

运行结果

在这里插入图片描述



559. N 叉树的最大深度

给定一个 N 叉树,找到其最大深度。

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

N 叉树输入按层序遍历序列化表示,每组子节点由空值分隔(请参见示例)。

示例 1:

img

输入:root = [1,null,3,2,4,null,5,6]
输出:3

示例 2:

img

输入:root = [1,null,2,3,4,5,null,null,6,7,null,8,null,9,10,null,null,11,null,12,null,13,null,null,14]
输出:5

代码

"""
# Definition for a Node.
class Node:def __init__(self, val: Optional[int] = None, children: Optional[List['Node']] = None):self.val = valself.children = children
"""class Solution:def maxDepth(self, root: 'Node') -> int:def maxdepth(node):if node==None:return 0max_depth=1for child in node.children:max_depth=max(max_depth,maxdepth(child)+1)return max_depthreturn maxdepth(root)

运行结果

在这里插入图片描述



111. 二叉树的最小深度

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

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

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

示例 1:

img

输入:root = [3,9,20,null,null,15,7]
输出:2

示例 2:

输入:root = [2,null,3,null,4,null,5,null,6]
输出:5

递归法

求最小深度和求最大深度一样后序遍历就可以了,有些人可能会直接这样的代码:

leftheight=getmin(node.left)
rightheight=getmin(node.right)
height=min(leftheight,rightheight)+1

其实还有这个误区:

代码

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:def minDepth(self, root: Optional[TreeNode]) -> int:def getmin(node):if node==None:return 0# 当右节点为空,左节点不为空if node.left==None and node.right!=None:return 1+getmin(node.right)# 当左节点不为空,右节点为空if node.left!=None and node.right==None:return 1+getmin(node.left)leftheight=getmin(node.left)rightheight=getmin(node.right)height=min(leftheight,rightheight)+1return heightreturn getmin(root)

运行结果

在这里插入图片描述

有问题欢迎评论或私信

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

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

相关文章

|Python新手小白中级教程|第三十章:日期与时间(入门)

文章目录 前言一、日期与时间的基本概念二、时间戳1.概念2.形成过程 三、Python的时间格式化符号四、时间元组1.时间元组:2.struct_time元组的属性 五、time库可以干什么总结 前言 大家好呀,BOBO仔回来啦。 说实话,这几天我们学习面向对象的…

代码随想录刷题day13|(链表篇)24.两两交换链表中的结点

目录 一、链表理论基础 二、思路及易错点 易错点 三、相关算法题目 四、错误代码分析 一、链表理论基础 代码随想录 (programmercarl.com) 二、思路及易错点 该题使用虚拟头结点正常进行模拟即可,有两个关键点,一是循环何时终止?终止…

PIC单片机设置bootloader程序和app程序地址方法

在调试bootloader和app程序的时候通常都需要设置程序的偏移地址,下面就总结一下使用MPLAB X IDE 设置程序地址的方法。 打开bootloader工程 工程上单击鼠标右键,选择Properties,打工工程属性窗口。 此时会打开项目属性对话框 左边类别选择XC8 Line…

51c大模型~合集105

我自己的原文哦~ https://blog.51cto.com/whaosoft/13101924 #刚刚,ChatGPT开始有了执行力! 现在 AI 智能体可以 24*7 小时为你打工。 2025 刚过去了半个月,OpenAI 在智能体领域「开大」了。 今天,OpenAI 正在为 ChatGPT 推出…

迅为龙芯2K1000开发板/核心板流畅运行Busybox、Buildroot、Loognix、QT5.12系统

硬件配置 国产龙芯处理器,双核64位系统,板载2G DDR3内存,流畅运行Busybox、Buildroot、Loognix、QT5.12 系统! 接口全板载4路USB HOST、2路千兆以太网、2路UART、2路CAN总线、Mini PCIE、SATA固态盘接口、4G接口、GPS接口WIF1、蓝牙、Mini H…

StarRocks强大的实时数据分析

代码仓库:https://github.com/StarRocks/starrocks?tabreadme-ov-file StarRocks | A High-Performance Analytical Database 快速开始:StarRocks | StarRocks StarRocks 是一款高性能分析型数据仓库,使用向量化、MPP 架构、CBO、智能物化…

web前端1--基础

(时隔数月我又来写笔记啦~) 1、下载vscode 1、官网下载:Visual Studio Code - Code Editing. Redefined 2、步骤: 1、点击同意 一直下一步 勾一个创建桌面快捷方式 在一直下一步 2、在桌面新建文件夹 拖到vscode图标上 打开v…

基于tldextract提取URL里的子域名、主域名、顶级域

TLD是TopLevel Domain的缩写。‌tldextract‌ 是一个用于从URL中提取子域、主域名和顶级域(TLD)的Python库。它利用公共后缀列表(Public Suffix List)来确保即使是复杂或不常见的URL结构也能被正确解析。tldextract能够处理包括IC…

音频入门(一):音频基础知识与分类的基本流程

音频信号和图像信号在做分类时的基本流程类似,区别就在于预处理部分存在不同;本文简单介绍了下音频处理的方法,以及利用深度学习模型分类的基本流程。 目录 一、音频信号简介 1. 什么是音频信号 2. 音频信号长什么样 二、音频的深度学习分…

数据结构之堆排序

文章目录 堆排序版本一图文理解 版本二向下调整建堆向上调整建堆 排升/降序升序 堆排序 版本一 基于已有数组建堆取堆顶元素并删除堆顶元素重新建大根堆,完成排序版本。 图文理解 版本二 前提:必须提供有现成的数据结构堆 数组建堆,首尾…

小菜鸟系统学习Python第三天

1.优先级问题: 结论: 幂运算>正负号>加减乘除和整除>比较运算符>逻辑运算符 2.三元运算符 3.assert断言:抛出AssertionError异常 4.for循环 4. 5.break和continue

常用排序算法之插入排序

目录 前言 一、基本原理 1.算法步骤 2.动画演示 3.插入排序的实现代码 二、插入排序的时间复杂度 1. 时间复杂度 1.最优时间复杂度 2.最差时间复杂度 3.平均时间复杂度 2. 空间复杂度 三、插入排序的优缺点 1.优点 2.缺点 四、插入排序的改进与变种 五、插入排…

数据分析及应用:经营分析中的综合指标解析与应用

目录 1. 市场份额(Market Share) 2. 客户获取成本(Customer Acquisition Cost, CAC) 3. 客户生命周期价值(Customer Lifetime Value, CLV) 4. 客户留存率(Customer Retention Rate, CRR) 5. 净推荐值(Net Promoter Score, NPS) 6. 转化率(Conversion Rate) …

工业相机 SDK 二次开发-Halcon 插件

本文介绍了 Halcon 连接相机时插件的使用。通过本套插件可连接海康 的工业相机。 一. 环境配置 1. 拷贝动态库 在 用 户 安 装 MVS 目 录 下 按 照 如 下 路 径 Development\ThirdPartyPlatformAdapter 找到目录为 HalconHDevelop 的文 件夹,根据 Halcon 版本找到对…

【Vim Masterclass 笔记25】S10L45:Vim 多窗口的常用操作方法及相关注意事项

文章目录 S10L45 Working with Multiple Windows1 水平分割窗口2 在水平分割的新窗口中显示其它文件内容3 垂直分割窗口4 窗口的关闭5 在同一窗口水平拆分出多个窗口6 关闭其余窗口7 让四个文件呈田字形排列8 光标在多窗口中的定位9 调节子窗口的尺寸大小10 变换子窗口的位置11…

Linux TCP 之 RTT 采集与 RTO 计算

我们来看看 Linux TCP 采集 RTT 的函数 tcp_rtt_estimator,看注释,充满了胶着。 但在那个谨慎的年代,这些意味着什么? RTT 最初仅用于 RTO 的计算而不是用于调速,RTO 的计算存在两个问题,如果过估&#x…

如何使用CRM数据分析优化销售和客户关系?

嘿,大家好!你有没有想过为什么有些公司在市场上如鱼得水,而另一些却在苦苦挣扎?答案可能就藏在他们的销售策略和客户关系管理(CRM)系统里。今天我们要聊的就是如何通过有效的 CRM 数据分析来提升你的销售额…

《Effective Java》学习笔记——第2部分 对象通用方法最佳实践

文章目录 第2部分 所有对象通用方法一、前言二、最佳实践内容1. equals()方法2. hashCode()方法3. toString() 方法4. clone() 方法5. finalize() 方法6. compareTo()方法(实现 Comparable 接口) 三、小结 第2部分 所有对象通用方法 一、前言 《Effect…

前沿技术趋势洞察:2024年技术的崭新篇章与未来走向!

引言 时光飞逝,2024年已经来临,回顾过去一年,科技的迅猛进步简直让人目不暇接。 在人工智能(AI)越来越强大的今天,我们不再停留在幻想阶段,量子计算的雏形开始展示它的无穷潜力,Web …

图的基本概念

一、图 二、顶点的度 三、图的同构 ​​​​​​​​​​​ 四、完全图 五、子图 六、补图