20250701【二叉樹公共祖先】|Leetcodehot100之236【pass】今天計劃

20250701

  • 思路與錯誤記錄
    • 1.二叉樹的數據結構與初始化
      • 1.1數據結構
      • 1.2 初始化
    • 2.解題
  • 完整代碼
  • 今天做了什么

在這里插入圖片描述

題目

在這里插入圖片描述

思路與錯誤記錄

1.二叉樹的數據結構與初始化

1.1數據結構

在這里插入圖片描述

1.2 初始化

根據列表,順序存儲構建二叉樹


def build_tree(nodes, index=0):# idx是root開始的索引# 1. 如果>len()說明是原先就沒有# 2. 節點創建結束if index >= len(nodes) or nodes[index] is None:return None# l_idx =  2*root_idx + 1# r_idx =  2*root_idx + 2root = TreeNode(nodes[index])root.left = build_tree(nodes, 2 * index + 1)root.right = build_tree(nodes, 2 * index + 2)return root

2.解題

首先確定LRD的遍歷順序
其次確定回溯的可能,找到指定元素之后,回溯返回來【確定是遞歸問題】,情況有:

  1. 在root返回
  2. 在一邊返回
  • 左邊
    (1)有一個節點是祖先
    (2)上面是祖先
  • 右邊
    同左
  1. 在兩邊返回
    這情況說明是兩個查找元素分布在root的兩側,因此祖先return root

在代碼實現的時候需要注意順序

在這里插入圖片描述

遞歸的過程實例【情況2】:
不是指定元素的那條回溯是null,找到指定元素的向上返回,其上一層返回的就是他們的祖先節點
在這里插入圖片描述
最后LRD遍歷完所有,左邊返回值【祖先節點】,右邊是null。所以只要return回來2并作為結果就行了

在這里插入圖片描述

完整代碼

## 并查集做。但是感覺是二叉樹+遞歸# 定義二叉樹節點類
class TreeNode:def __init__(self, x):self.val = xself.left = Noneself.right = Noneclass Solution:def lowestCommonAncestor(self, root, p, q):# 0. 如果root為空,或者root就是p或q,直接返回rootif not root or root == p or root == q:return root# 遞歸查找左子樹和右子樹left = self.lowestCommonAncestor(root.left, p, q)right = self.lowestCommonAncestor(root.right, p, q)# 1.左右都返回,root是祖先if left and right:return root# 2.一邊返回【還可以添加終止查找吧?如果都在左可以直接不要找右邊了】if not left:return rightif not right:return left# return left if left else right# 根據列表,順序存儲構建二叉樹
def build_tree(nodes, index=0):# idx是root開始的索引# 1. 如果>len()說明是原先就沒有# 2. 節點創建結束if index >= len(nodes) or nodes[index] is None:return None# l_idx =  2*root_idx + 1# r_idx =  2*root_idx + 2root = TreeNode(nodes[index])root.left = build_tree(nodes, 2 * index + 1)root.right = build_tree(nodes, 2 * index + 2)return root# 測試用例
if __name__ == "__main__":# 示例1nodes1 = [3,5,1,6,2,0,8,None,None,7,4]root1 = build_tree(nodes1)p1 = root1.left  # 5q1 = root1.right  # 1solution = Solution()lca1 = solution.lowestCommonAncestor(root1, p1, q1)

今天做了什么

  • 530 起床
  • 630 跑步【6k】
  • 830工位,1題&八股
  • 1130吃飯&打電話,1230看小說 【沒打電話,自己玉玉去了】
  • 1400 代碼 【自閉】
  • 下樓把衣服帶出來洗
  • 1930 寫東西/看論文 【打了3h羽毛球,一晚上都輸!】
  • 2330 前睡覺 【熬夜惡魔了】

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

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

相關文章

Web應用開發 --- Tips

Web應用開發 --- Tips General后端需要做參數校驗代碼風格和Api設計風格的一致性大于正確性數據入庫時間應由后端記錄在對Api修改的時候,要注意兼容情況,避免breaking change 索引對于查詢字段,注意加索引對于唯一的字段,考慮加唯…

CSS 安裝使用教程

一、CSS 簡介 CSS(Cascading Style Sheets,層疊樣式表)是用于為 HTML 頁面添加樣式的語言。通過 CSS 可以控制網頁元素的顏色、布局、字體、動畫等,是前端開發的三大核心技術之一(HTML、CSS、JavaScript)。…

機器學習中為什么要用混合精度訓練

目錄 FP16與顯存占用關系機器學習中一般使用混合精度訓練:FP16計算 FP32存儲關鍵變量。 FP16與顯存占用關系 顯存(Video RAM,簡稱 VRAM)是顯卡(GPU)專用的內存。 FP32(單精度浮點)&…

[附源碼+數據庫+畢業論文+答辯PPT]基于Spring+MyBatis+MySQL+Maven+vue實現的中小型企業財務管理系統,推薦!

摘 要 現代經濟快節奏發展以及不斷完善升級的信息化技術,讓傳統數據信息的管理升級為軟件存儲,歸納,集中處理數據信息的管理方式。本中小型企業財務管理就是在這樣的大環境下誕生,其可以幫助管理者在短時間內處理完畢龐大的數據信…

華為云Flexus+DeepSeek征文 | 對接華為云ModelArts Studio大模型:AI賦能投資理財分析與決策

引言:AI金融,開啟智能投資新時代?? 隨著人工智能技術的飛速發展,金融投資行業正迎來前所未有的變革。??華為云ModelArts Studio??結合??Flexus高性能計算??與??DeepSeek大模型??,為投資者提供更精準、更高效的投資…

從模型部署到AI平臺:云原生環境下的大模型平臺化演進路徑

📝個人主頁🌹:慌ZHANG-CSDN博客 🌹🌹期待您的關注 🌹🌹 一、引言:部署只是起點,平臺才是終局 在過去一年,大語言模型的飛速發展推動了AI生產力浪潮。越來越多…

UI前端大數據可視化創新:利用AR/VR技術提升用戶沉浸感

hello寶子們...我們是艾斯視覺擅長ui設計、前端開發、數字孿生、大數據、三維建模、三維動畫10年經驗!希望我的分享能幫助到您!如需幫助可以評論關注私信我們一起探討!致敬感謝感恩! 在大數據與沉浸式技術高速發展的今天,傳統二維數據可視化已難以滿足復雜數據場景的…

MacOS 安裝brew 國內源【超簡潔步驟】

?/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"請輸入序號:1

GENESIS64:全球知名的工業設備監控與可視化平臺

一、概述 GENESIS64是一款由ICONICS開發的先進工業自動化軟件平臺,專為實現實時數據可視化、智能化監控及管理而設計。該平臺采用模塊化架構,具有高效的數據處理能力和靈活的擴展性,適用于各類工業環境,幫助企業實現自動化運營&a…

RNN(Recurrent Neural Network,循環神經網絡)家族詳解(RNN,LSTM,GRU)

文章目錄 一、RNN基礎:序列建模的核心思想1.1 RNN的本質與核心機制1.2 應用場景與結構分類 二、傳統RNN:序列模型的起點2.1 內部結構與數學表達2.2 計算示例2.3 RNN在Pytorch中的API2.4 代碼示例2.5 優缺點與梯度問題 三、LSTM:門控機制破解長…

多云密鑰統一管理實戰:CKMS對接阿里云/華為云密鑰服務

某保險公司因阿里云KMS密鑰與華為云密鑰割裂管理,導致勒索事件中解密失敗!據統計,73%企業因多云密鑰分散管理引發數據恢復延遲(IDC 2024)。本文將詳解安當CKMS統一納管方案,實現跨云密鑰全生命周期管控&…

光伏接入承載力計算仿真:基于圖計算技術的自動建模技術研究

光伏接入承載力計算仿真:基于圖計算技術的自動建模技術研究 一、 引言:挑戰與機遇 光伏發電的大規模接入對中低壓配電網的安全穩定運行帶來了巨大挑戰。精確評估電網對光伏的承載力(Hosting Capacity, HC)是保障消納與安全的關鍵。傳統承載力評估嚴重依賴電網仿真,而仿真…

如何在Excel中每隔幾行取一行

如何在Excel中每隔幾行取一行 摘要: Excel中快速實現每隔n行取一行的技巧:使用OFFSET函數配合ROW函數即可實現。公式為OFFSET(起始單元格,(ROW(A1)-1)*n,),其中n為間隔行數。例如從A2開始每2行取一行,公式為OFFSET(A2,(ROW(A1)-1)…

【MariaDB】MariaDB Server 11.3.0 Alpha下載、安裝、配置

MariaDB是一個開源關系型數據庫管理系統(RDBMS),由MySQL的原始開發者Michael Widenius主導開發。作為MySQL的分支,MariaDB旨在保持與MySQL的高度兼容性,同時提供性能優化、新功能和更好的開源承諾。 目錄 MariaDB下載 …

如何保證緩存和數據庫的雙寫一致性

程序員面試資料大全|各種技術書籍等資料-1000G IDEA開發工具- FREE 一、雙寫一致性問題本質 在分布式系統中,緩存與數據庫雙寫一致性指當數據被修改時,如何確保緩存(如Redis)和數據庫(如MySQL&#xff09…

Qt 5.9 XML文件寫入指南

Qt 5.9 XML文件寫入指南 在Qt 5.9中,有多種方法可以編寫XML文件。下面我將介紹三種主要方法,并提供完整的代碼示例和最佳實踐。 三種XML寫入方法對比 方法優點缺點適用場景QXmlStreamWriter高效、內存占用低無樹形結構大型XML文件QDomDocument樹形結構…

一些ubuntu命令記錄(持續補充)

一、查看代碼運行占用的內存 1、使用 top 命令 top 命令是一個實時的系統監控工具,可以顯示當前系統中所有進程的資源使用情況。運行以下命令: top 在 top 界面中,可以看到每個進程的內存使用情況(%MEM 列)。 如何…

今日學習:音視頻領域入門文章參考(待完善)

音視頻領域概覽 入門文章參考 CSDN 雷神 博客園 2022-5-22

.npmrc和.yarnrc配置文件介紹:分別用于 Node.js 中的 npm(Node Package Manager)和 Yarn 包管理工具

.npmrc 和 .yarnrc 是兩個配置文件,分別用于 Node.js 中的 npm(Node Package Manager)和 Yarn 包管理工具。它們存儲了與包管理相關的配置選項,允許用戶自定義和控制包的安裝、版本、緩存等行為。下面是它們的詳細說明&#xff1a…

數字人分身 + 矩陣系統聚合:源碼搭建,支持OEM

在 AIGC 技術爆發的當下,數字人分身已從概念走向實用,而矩陣系統的聚合能力則讓單個數字人分身突破場景限制,實現 “一人多崗” 的規模化應用。無論是企業客服、直播帶貨,還是教育培訓、虛擬社交,數字人分身 矩陣系統…