代碼隨想錄算法訓練營第二十三天 | 530.二叉搜索樹的最小絕對差、501.二叉搜索樹中的眾數、236. 二叉樹的最近公共祖先

目錄

530.二叉搜索樹的最小絕對差

思路

代碼

501.二叉搜索樹中的眾數

思路

代碼

?236.?二叉樹的最近公共祖先??

思路

代碼


530.二叉搜索樹的最小絕對差

需要領悟一下二叉樹遍歷上雙指針操作,優先掌握遞歸?

題目鏈接/文章講解:代碼隨想錄

視頻講解:二叉搜索樹中,需要掌握如何雙指針遍歷!| LeetCode:530.二叉搜索樹的最小絕對差_嗶哩嗶哩_bilibili

思路

? ? ? ? 二叉搜索樹的一個很重要的特性——中序遍歷是一個有序的遞增數組。有序遞增數組求兩個數的最小差值那不是有手就行。

代碼
class Solution:def __init__(self):self.vec = []def traversal(self, root):if root is None:returnself.traversal(root.left)self.vec.append(root.val)  # 將二叉搜索樹轉換為有序數組self.traversal(root.right)def getMinimumDifference(self, root):self.vec = []self.traversal(root)if len(self.vec) < 2:return 0result = float('inf')for i in range(1, len(self.vec)):# 統計有序數組的最小差值result = min(result, self.vec[i] - self.vec[i - 1])return result

501.二叉搜索樹中的眾數

和?530差不多雙指針思路,不過?這里涉及到一個很巧妙的代碼技巧。

題目鏈接/文章講解:代碼隨想錄

代碼隨想錄視頻講解:不僅雙指針,還有代碼技巧可以驚艷到你! | LeetCode:501.二叉搜索樹中的眾數_嗶哩嗶哩_bilibili

思路

? ? ? ?這里首次引入了pre指針,采用的還是二叉樹的中序遍歷,每次和前一個數進行比較,如果一樣,count就+1,每層遍歷時在遍歷中間節點后更新出現次數最大的數,注意每次更新最大的數需要把原來的res[ ] 清空,因為原來里面裝的不是出現頻率最大的數了。

代碼
from collections import defaultdict
from typing import Optional, Listclass TreeNode:def __init__(self, val=0, left=None, right=None):self.val = valself.left = leftself.right = rightclass Solution:def __init__(self):self.res = []self.count = 0self.maxcount = 0self.pre = Nonedef findMode(self, root: Optional[TreeNode]) -> List[int]:self.count = 0self.maxcount = 0self.pre = Noneself.res = []self.traversal(root)return self.resdef traversal(self, cur):if not cur:return None# 左self.traversal(cur.left)# 中if not self.pre:self.count = 1elif self.pre.val == cur.val:self.count += 1else:self.count = 1self.pre = curif self.count > self.maxcount:  # 當前計數頻率大于最大值頻率,更新max,清空resself.maxcount = self.countself.res = []if self.count == self.maxcount:self.res.append(cur.val)# 右self.traversal(cur.right)return

?236.?二叉樹的最近公共祖先??

本題其實是比較難的,可以先看我的視頻講解?

題目鏈接:

代碼隨想錄

視頻講解:自底向上查找,有點難度! | LeetCode:236. 二叉樹的最近公共祖先_嗶哩嗶哩_bilibili

思路

? ? ? ? 這種題就是我看著好像知道什么個原理,實際上讓我寫寫不了一點。。。(每日崩潰1/1)

?這道題使用的是后序遍歷,如果遍歷到當前節點就是p或者q就返回當前節點,層層往回傳,最后會傳到根節點。(因為是后序遍歷,哪怕找到了答案也要遍完的)(我知道我這么講大家根本聽不懂,所以點開視頻看吧,Carl哥講的超級nice,再配合代碼應該可以看懂)

代碼
class TreeNode:def __init__(self, x):self.val = xself.left = Noneself.right = Noneclass Solution:def lowestCommonAncestor(self, root: 'TreeNode', p: 'TreeNode', q: 'TreeNode') -> 'TreeNode':if root == p or root == q or root is None:return rootleft = self.lowestCommonAncestor(root.left,p,q)right = self.lowestCommonAncestor(root.right,p,q)if left is not None and right is not None:return rootelif left is None and right is not None :return rightelif left is not None and right is None:return leftelse:return None

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/11608.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/11608.shtml
英文地址,請注明出處:http://en.pswp.cn/web/11608.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java Spring的定時任務的配置和使用

在Spring框架中&#xff0c;配置和使用定時任務主要涉及Scheduled注解以及Spring的異步任務執行能力。以下是詳細步驟&#xff1a; 1. 引入依賴 對于Spring Boot項目&#xff0c;通常已經包含了Spring框架&#xff0c;因此不需要額外添加定時任務的依賴。如果使用的是Spring框…

AI大模型測評系統opencompass源碼解析

1 注冊器(Registry) 為了管理功能相似的模塊,MMEngine實現了注冊器。注冊器可以被視作這些類或函數的抽象。例如注冊器 MODELS 可以被視作所有模型的抽象。 1.1 什么是注冊器 MMEngine 實現的注冊器可以看作一個映射表和模塊構建方法(build function)的組合。 映射表:…

八、e2studio VS STM32CubeIDE之內存使用情況窗口

目錄 一、概述/目的 二、STM32CubeIDE Build Analyzer 三、e2studio Memory Usage 八、e2studio VS STM32CubeIDE之內存使用情況窗口 一、概述/目的 1、嵌入開發最大特點之一就是資源受限&#xff0c;關注芯片資源使用詳情是優秀工程師的技能之一 2、Keil和IAR都不支持內存…

CTFshow 信息搜集

第一題1 進入靶場 直接看源碼發現flag 第二題 1 按右鍵沒辦法看源碼 按ctrlu可以查看源碼 第三題 0 查看源碼 發現還是什么都沒有 用bp抓包發現flag 第四題1 直接進robots.txt 訪問flagishere.txt獲得flag 第五題 0 提示了phps源碼泄露 用目錄掃描工具沒掃出來 看wp 發現有…

網絡編程套接字詳解

目錄 1. 預備介紹 2.網絡字節序 3.udp網絡程序 4.地址轉換函數 5.udp網絡編程 1.預備介紹 1.1源IP地址和目標IP地址 舉個例子: 從北京出發到上海旅游, 那么源IP地址就是北京, 目標IP地址就是上海. 1.2 端口號 作用: 標識一個進程, 告訴OS這個數據交給那個進程來處理; (1)…

Oracle: 一個用戶多個表空間處理

1.場景描述 今天工作中&#xff0c;同事說建了一個用戶&#xff0c;往里面導入數據時提示表空間不存在&#xff0c;建了表空間后&#xff0c;部分仍然導不進去。期望幫忙創建表空間&#xff0c;并指定默認表空間&#xff0c;成功將數據導入。 &#xff08;1&#xff09;創建好的…

K8s:二進制安裝k8s(單臺master)

目錄 一、安裝k8s 1、拓撲圖 2、系統初始化配置 2.1關閉防火墻selinx以及swap 2.2設置主機名 2.3在每臺主機中添加hosts&#xff0c;做映射 2.4調整內核參數&#xff0c;將橋接的ipv4流量傳遞到iptables&#xff0c;關閉ipv6 2.4時間同步 3、部署docker引擎&#xff0…

使用LangChain和Neo4j快速創建RAG應用

大家好&#xff0c;Neo4j 通過集成原生的向量搜索功能&#xff0c;增強了其對檢索增強生成&#xff08;RAG&#xff09;應用的支持&#xff0c;這標志著一個重要的里程碑。這項新功能通過向量索引搜索處理非結構化文本&#xff0c;增強了 Neo4j 在存儲和分析結構化數據方面的現…

go語言map底層及擴容機制原理詳解(上)

底層數據結構-哈希表 go語言map的底層數據結構是哈希表&#xff1a;通過哈希表來存儲鍵值對&#xff0c;通過hash函數把鍵值對散列到一個個桶(bucket)中。 什么是哈希表&#xff1f; 在順序結構以及平衡樹中&#xff0c;元素與其的存儲位置之間沒有對應關系&#xff0c;因此…

SwiftUI中的@StateObject和@ObservedObject的區別

SwiftUI中的StateObject和ObservedObject屬性包裝器指示視圖更新以響應被觀察對象的變化。雖然這兩個屬性包裝器看起來很相似&#xff0c;但在使用SwiftUI構建應用程序時&#xff0c;有一個關鍵的區別需要理解。 兩個屬性包裝器都要求對象符合ObservableObject協議。這個協議表…

表征和基于結構的蛋白質工程:黃芪特異性皂苷乙酰轉移酶-文獻精讀14

Characterization and structure-based protein engineering of a regiospecific saponin acetyltransferase from Astragalus membranaceus 表征和基于結構的蛋白質工程&#xff1a;黃芪特異性皂苷乙酰轉移酶&#xff0c;一篇乙酰基轉移酶文章精讀分享~ 摘要 乙酰化有助于許…

【C++】繼承相關(基類與派生類的繼承關系以及細節整理)

目錄 00.引言 01.繼承的定義 02.基類和派生類對象 03.繼承中的作用域 04.派生類的默認成員函數 05.友元、靜態成員 00.引言 繼承是面向對象編程中的一個重要概念&#xff0c;它的作用是創建一個新的類&#xff0c;該類可以從一個已存在的類&#xff08;父類/基類&#x…

服務攻防——數據庫安全

第一步: 端口掃描&#xff1a;nmap 掃不到端口&#xff1a;端口被修改&#xff0c;防護軟件&#xff0c;放在內網環境 mysql 內置端口3306 第一種官方漏洞 第一步:先掃描有什么端口開發 用這個錯誤密碼一直訪問&#xff0c;最終就進去了 弱口令猜解 不可以直接猜解&#x…

WEB后端復習——MVC、SSM【含登錄頁面代碼】

MVC&#xff08;Model-View-Controller&#xff09;是一種軟件設計模式&#xff0c;用于將應用程序分解為三個相互關聯的組件&#xff1a;模型&#xff08;Model&#xff09;、視圖&#xff08;View&#xff09;和控制器&#xff08;Controller&#xff09;。這種模式在構建用戶…

機器人學導論實驗1—CoppeliaSim 平臺介紹及初步使用BJTU

1. 實驗內容分析 對實驗內容的理解及關鍵點&#xff1a; 理解這個實驗的關鍵點在于理解如何使用CoppeliaSim和MATLAB來控制和操作機器人。需要熟悉這兩個工具的基本操作&#xff0c;例如如何加載場景、如何修改機器人參數、如何使用MATLAB客戶端程序來控制機器人等。此外&#…

Docker 部署 Prometheus 實現一個極簡的 QPS 監控

背景 : Prometheus 是近年來最流行的開源監控框架, 其功能強大且易于使用, 擁有各種主流后端語言(Java/Go/Python/Node.js等)與各種場景(如web handler/ k8s/Nginx/MySQL等)的客戶端, 并自帶圖形化顯示頁面。分享一個快速入門Prometheus 的教程, 實現一個極簡的, 后端開發需要特…

Nginx-基礎-基礎配置-Location

Location 參數匹配模式 參數匹配方式匹配模式說明注意事項精準匹配普通字符串匹配用于標準uri前&#xff0c;要求請求字符串與uri精準匹配&#xff0c;成功則立即處理&#xff0c;nginx停止搜索其他匹配。~正則匹配正則表達式匹配用于正則uri&#xff0c;表示uri包含正則表達…

使用 Docker 輕松部署 Spring Boot 應用

當今軟件開發領域&#xff0c;Docker 和 Spring Boot 的組合已成為開發和部署應用程序的黃金標準。在這篇博客中&#xff0c;我們將詳細探討如何將 Spring Boot 應用容器化并使用 Docker 進行部署&#xff0c;確保你的部署過程既高效又可靠。 引言 Docker 提供了一個標準化的…

基于SSM的理發店會員管理系統的設計和實現(有報告)。Javaee項目。ssm項目。

演示視頻&#xff1a; 基于SSM的理發店會員管理系統的設計和實現&#xff08;有報告&#xff09;。Javaee項目。ssm項目。 項目介紹&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三層體系結構&#xff0…

Docker安裝達夢數據庫

1.確保已安裝Docker 可參考&#xff1a;Linux安裝Docker-CSDN博客 2.上傳dm鏡像并導入安裝包 可以從&#xff1a;產品下載 | 達夢數據庫下載dm鏡像&#xff0c;如下圖&#xff1a; docker load -i dm8_20230808.tar 3.導入后查看鏡像 docker images 4.啟動容器 docker run …