代碼隨想錄算法訓練營第17天—二叉樹06 | ● *654.最大二叉樹 ● 617.合并二叉樹 ● 700.二叉搜索樹中的搜索 ● *98.驗證二叉搜索樹

*654.最大二叉樹

題目鏈接/文章講解:https://programmercarl.com/0654.%E6%9C%80%E5%A4%A7%E4%BA%8C%E5%8F%89%E6%A0%91.html
視頻講解:https://www.bilibili.com/video/BV1MG411G7ox

  • 考點
    • 前序遍歷
    • 構建二叉樹
  • 我的思路
    • 參考了力扣題目里的提示
    • 遞歸三要素
      • 形參:數值列表;返回值,當前節點
      • 退出條件:若數值列表為空,返回None
      • 遞歸邏輯
        • 對數值列表求最大值,并基于最大值創建當前節點
        • 利用最大值的索引切割數值列表,并以切割得到的左數值列表作為參數執行左遞歸生成左子樹
        • 利用最大值的索引切割數值列表,并以切割得到的右數值列表作為參數執行右遞歸生成右子樹
  • 視頻講解關鍵點總結
    • 和我的思路一致
    • 二叉樹構造類型的問題要使用前序遍歷,先構建中間節點
  • 我的思路的問題
  • 代碼書寫問題
  • 可執行代碼
class Solution:def constructMaximumBinaryTree(self, nums: List[int]) -> Optional[TreeNode]:if not nums:return Noneindex = 0max_value = -1for i in range(len(nums)):if nums[i] > max_value:max_value = nums[i]index = iroot = TreeNode(max_value)root.left = self.constructMaximumBinaryTree(nums[:index])root.right = self.constructMaximumBinaryTree(nums[index + 1:])return root

617.合并二叉樹

題目鏈接/文章講解:https://programmercarl.com/0617.%E5%90%88%E5%B9%B6%E4%BA%8C%E5%8F%89%E6%A0%91.html
視頻講解:https://www.bilibili.com/video/BV1m14y1Y7JK

  • 考點
    • 前序遍歷
    • 二叉樹構建
  • 我的思路
    • 遞歸三要素
      • 形參:兩棵樹的當前節點;返回值為新樹的當前節點
      • 退出條件:如果兩棵樹的當前節點均為空,則返回None
      • 遞歸邏輯
        • 由于本題當兩個二叉樹節點狀態不同,執行的邏輯會不同,因此接著退出條件的if繼續寫
        • elif,1號二叉樹節點為空,2號不為空,則當前節點基于2號樹節點創建,同時執行左右遞歸(1號二叉樹的位置直接放None)生成當前節點的左右節點
        • elif,2號二叉樹節點為空,1號不為空,則當前節點基于1號樹節點創建,同時執行左右遞歸(2號二叉樹的位置直接放None)生成當前節點的左右節點
        • else,1號2號都不為空,則當前節點基于二者和創建,同時執行左右遞歸生成當前節點的左右節點
        • 返回當前節點
  • 視頻講解關鍵點總結
    • 可以對上述思路進行優化
    • 對于退出條件和兩個elif判斷,可優化為,依次判斷1號樹節點和2號樹節點是否為空,如果1號為空,直接返回2號節點,如果2號為空,直接返回1號節點(因為2者中一旦其一為空,則其后續也為空,此時新樹的后續節點和老樹里不為空的那個完全一致)
  • 我的思路的問題
    • 可優化邏輯,優化思路見上
  • 代碼書寫問題
  • 可執行代碼
class Solution:def mergeTrees(self, root1: Optional[TreeNode], root2: Optional[TreeNode]) -> Optional[TreeNode]:if not root1:return root2if not root2:return root1root = TreeNode(root1.val + root2.val)root.left = self.mergeTrees(root1.left, root2.left)root.right = self.mergeTrees(root1.right, root2.right)return root

700.二叉搜索樹中的搜索

題目鏈接/文章講解: https://programmercarl.com/0700.%E4%BA%8C%E5%8F%89%E6%90%9C%E7%B4%A2%E6%A0%91%E4%B8%AD%E7%9A%84%E6%90%9C%E7%B4%A2.html
視頻講解:https://www.bilibili.com/video/BV1wG411g7sF

  • 考點
    • 二叉搜索樹的性質
    • 二叉樹遍歷
  • 我的思路
    • 直接進行搜索,未利用二叉搜索樹的性質
  • 視頻講解關鍵點總結
    • 利用二叉搜索樹的性質
    • 在遞歸邏輯里,當val大于當前節點的值時,向右子樹搜索,小于時,向左子樹搜索
  • 我的思路的問題
    • 為考慮二叉搜索樹的性質
  • 代碼書寫問題
  • 可執行代碼
class Solution:def searchBST(self, root: Optional[TreeNode], val: int) -> Optional[TreeNode]:if root is None:return Noneif root.val == val:return rootif root.val > val:return self.searchBST(root.left, val)else:return self.searchBST(root.right, val)

*98.驗證二叉搜索樹

題目鏈接/文章講解:https://programmercarl.com/0098.%E9%AA%8C%E8%AF%81%E4%BA%8C%E5%8F%89%E6%90%9C%E7%B4%A2%E6%A0%91.html
視頻講解:https://www.bilibili.com/video/BV18P411n7Q4

  • 考點
    • 二叉搜索樹的特性
    • 中序遍歷
    • 雙指針
  • 我的思路
    • 思路較為混亂
  • 視頻講解關鍵點總結
    • 利用中序遍歷和二叉搜索樹的特性,把題目簡化為只需要判斷前序遍歷過程中前后兩個節點是否是后者大于前者即可
    • 一種做法是定義一個額外的數組,在中序遍歷的過程中把所有的值加到數組中,之后判斷數組是否是個遞增數組
    • 第二種做法是在遞歸過程中維護一個表示上一節點值的變量,并在每次遞歸時把當前節點與其相比
    • 第三種做法是雙指針,一個指針指向上一節點,另一指針為當前節點
      • 給Solution類初始化一個pre指針
      • 遞歸三要素
        • 形參:當前節點;返回值為True或False
        • 退出條件:若當前節點為空,return True(因為如果是空二叉樹也是二叉搜索樹)
        • 遞歸邏輯
          • 中序遍歷
          • (左)左遞歸并接收其返回值
          • (中)如果pre指針不為空且當前節點的值小于等于之前指針的值,return False;否則把當前節點賦給pre指針
          • (右)右遞歸并接收其返回值
          • 如果左右遞歸返回值都為True,則返回True,否則返回False
  • 我的思路的問題
    • 無思路
  • 代碼書寫問題
  • 可執行代碼
class Solution:def __init__(self):self.pre = Nonedef isValidBST(self, root: Optional[TreeNode]) -> bool:if root is None:return Trueleft = self.isValidBST(root.left)if self.pre is not None and self.pre.val >= root.val:return Falseelse:self.pre = rootright = self.isValidBST(root.right)return left and right

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

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

相關文章

【大數據面試題】008 談一談 Flink資源如何配置

【大數據面試題】008 談一談 Flink 資源如何配置 并行度 Parallelism 概念作用Slot 概念作用如何設置TaskManager 任務管理器Flink submit 腳本 一步一個腳印,一天一道面試題 該文章有較多引用文章 https://zhuanlan.zhihu.com/p/572170629?utm_id0 并行度 Paralle…

Unity2023.1.19沒有PBR Graph?

Unity2023.1.19沒有PBR Graph? 關于Unity2023.1.19沒有PBR graph的說法,我沒看見管方給出的答案,百度則提到了Unity2020版之后Shader Graph的“全新更新”,之前也沒太注意版本的區別,以后項目盡量都留心一下。 之前文章說過,孿生智慧項目推薦使用URP渲染管線,以上的截…

安裝sklearn遇到ImportError: dlopen: cannot load any more object with static TLS

1.看https://blog.csdn.net/Go_ahead_forever/article/details/133755918 知不能 pip install sklearn,而是 pip install scikit-learn2.網上說調換import的順序就能解決。 但是我不知道調換哪個,索性重新開了anaconda環境,一個個安裝缺什么…

Stable Diffusion 繪畫入門教程(webui)-ControlNet(線稿約束)

上篇文章介紹了openpose,本篇文章介紹下線稿約束,關于線稿約束有好幾個處理器都屬于此類型,但是有一些區別。 包含: 1、Canny(硬邊緣):識別線條比較多比較細,一般用于更大程度得還原照片 2、ML…

在docker中運行vins-fusion

文章目錄 VINS-fusion拉取鏡像創建容器在vscode中運行代碼運行效果VINS-fusion VINS-Fusion 是一個開源的實時多傳感器狀態估計庫,主要由香港科技大學的沈邵劼教授領導的研究團隊開發。它是 VINS-Mono(單目視覺慣性系統)的擴展,支持多種傳感器組合,如雙目、立體相機和IMU…

Spring Security 認證授權安全框架

Spring Security概述 1.什么是Spring Security? Spring Security是一個Java框架,用于保護應用程序的安全性。它提供了一套全面的安全解決方案,包括身份驗證、授權、防止攻擊等功能。Spring Security基于過濾器鏈的概念,可以輕松地集成到任…

指針筆試題(C語言進階)

目錄 前言 1、案例一 1.1 答案 1.2 解析 2、案例二 2.1 答案 2.2 解析 3、案例三 3.1 答案 3.2 解析 4、案例四 4.1 答案 4.2 解析 5、案例五 5.1 答案 5.2 解析 總結 前言 “紙上得來終覺淺,絕知此事要躬行”。本篇通過對指針實際案例的分析&…

Google重磅開源!Gemma 2B/7B小模型登場,6萬億Tokens喂飽,聊天編程兩不誤,LLaMA也黯然失色?

Google又有大動作! 近日,他們發布了Gemma 2B和7B兩個開源AI模型,與大型封閉模型不同,它們更適合小型任務,如聊天和文本摘要。 這兩個模型在訓練過程中使用了6萬億個Tokens的數據,包括網頁文檔、代碼和數學…

收單外包機構備案2023年回顧和2024年展望

孟凡富 本文原標題為聚合支付深度復盤與展望,首發于《支付百科》公眾號! 收單外包服務機構在我國支付收單市場中占據著舉足輕重的地位,其規模在政策引導和市場需求驅動下不斷擴大。同時,隨著行業自律管理體系的持續發展和完善&a…

文獻速遞:GAN醫學影像合成--用生成對抗網絡生成 3D TOF-MRA 體積和分割標簽

文獻速遞:GAN醫學影像合成–用生成對抗網絡生成 3D TOF-MRA 體積和分割標簽 01 文獻速遞介紹 深度學習算法在自然圖像分析中的成功近年來已被應用于醫學成像領域。深度學習方法已被用于自動化各種耗時的手動任務,如醫學圖像的分割和分類(G…

頂刊中很出彩的二元變量圖

導師希望你發頂刊, 但你的圖紙差點意思, 那么,你不妨試試這個, 二元變量圖, 在頂刊中都很出彩哦! 本次,我們來以“降水量”和“NDVI”兩個數據為例,繪制二元變量分析圖,表達“降水量”和“NDVI”之間的關系。 什么是二元變量圖 首先還是先解釋下“二元變量圖”。顧…

OpenCV中saturate_cast模板函數

在OpenCV中,saturate_cast是一個模板函數,用于正確地將一個數值從一種類型轉換到另一種類型,同時確保結果在目標類型的有效范圍內。這在圖像處理中特別有用,比如當像素值在經過計算后可能超出其數據類型允許的范圍時。saturate_ca…

-bash: /root/.ssh/authorized_keys: Read-only file system

問題背景 由于跳板機不支持 ssh-copy-id 命令&#xff0c;為了配置免密登錄&#xff0c;考慮在服務器上手動使用 cat 命令寫入跳板機公鑰 cat <<EOL >> ~/.ssh/authorized_keys [Your public key] EOL但卻出現了以下錯誤 -bash: /root/.ssh/authorized_keys: Re…

編程筆記 Golang基礎 013 格式化輸入輸出

編程筆記 Golang基礎 013 格式化輸入輸出 一、格式化輸出1. fmt.Print系列函數2. Printf格式說明3. 格式化布爾類型 二、格式化輸入1. fmt.Scan系列函數注意事項 三、練習小結 Go語言中的格式化輸入和輸出主要通過標準庫 fmt 包來實現。主要是輸出需要格式化。 一、格式化輸出 …

掃盲貼:Svg動畫和Canvas動畫有什么區別

hello&#xff0c;我是貝格前端工場&#xff0c;網頁中動畫的實現有N種方式&#xff0c;比如css動畫&#xff0c;js動畫&#xff0c;svg動畫&#xff0c;canvas動畫等等&#xff0c;每一種動畫都有對應的場景&#xff0c;本問重點介紹一下svg和canvas動畫的異同點&#xff0c;歡…

大工程 從0到1 數據治理 數倉篇(sample database classicmodels _No.7)

大工程 從0到1 數據治理 之數倉篇 我這里還是sample database classicmodels為案列&#xff0c;可以下載&#xff0c;我看 網上還沒有類似的 案列&#xff0c;那就 從 0-1開始吧&#xff01; 提示&#xff1a;寫完文章后&#xff0c;目錄可以自動生成&#xff0c;如何生成可參…

TRS 2024 論文閱讀 | 基于點云處理和點Transformer網絡的人體活動連續識別

無線感知/雷達成像部分最新工作<持續更新>: 鏈接地址 注1:本文系“無線感知論文速遞”系列之一,致力于簡潔清晰完整地介紹、解讀無線感知領域最新的頂會/頂刊論文(包括但不限于 Nature/Science及其子刊; MobiCom, Sigcom, MobiSys, NSDI, SenSys, Ubicomp; JSAC, 雷達學…

提高代碼質量的 10 條編碼原則

提高代碼質量的 10 條編碼原則 本文轉自 公眾號 ByteByteGo&#xff0c;如有侵權&#xff0c;請聯系&#xff0c;立即刪除 今天來聊聊提高代碼質量的 10 條編碼原則。 軟件開發需要良好的系統設計和編碼標準。我們在下圖中列出了 10 條良好的編碼原則。 01 遵循代碼規范 我們…

Studio One破解版和正版的區別 Studio One購買是永久的嗎

在過去的很長一段時間里&#xff0c;很多小伙伴想要使用一款軟件時&#xff0c;可能第一時間就去網上尋找破解版的資源&#xff0c; 白嫖的資源固然很香&#xff0c;但隨著法制的健全和人們版權意識的增強&#xff0c;現在破解版的資源是越來越少了。同時破解版的資源也會伴隨著…

大數據計算技術秘史(上篇)

在之前的文章《2024 年&#xff0c;一個大數據從業者決定……》《存儲技術背后的那些事兒》中&#xff0c;我們粗略地回顧了大數據領域的存儲技術。在解決了「數據怎么存」之后&#xff0c;下一步就是解決「數據怎么用」的問題。 其實在大數據技術興起之前&#xff0c;對于用戶…