代碼隨想錄算法訓練營 day23| ● 669. 修剪二叉搜索樹 ● 108.將有序數組轉換為二叉搜索樹 ● 538.把二叉搜索樹轉換為累加樹

文章目錄

  • 前言
  • 669. 修剪二叉搜索樹
    • 思路
    • 方法一 遞歸法
    • 方法二 迭代法
  • 108.將有序數組轉換為二叉搜索樹
    • 思路
    • 方法一 遞歸法
    • 方法二 迭代法
  • 538.把二叉搜索樹轉換為累加樹
    • 思路
    • 方法一
    • 方法二
  • 總結


前言

迭代法都沒看主要是669和538【538很簡單】

669. 修剪二叉搜索樹

在這里插入圖片描述
在這里插入圖片描述

思路

不用看教程,思路很清晰
💖總體思路【單層遞歸邏輯】

  1. 如果當前節點的值小于low,就處理root的右子樹(因為左子樹一定不符合),返回右子樹的修剪結果,也就是return traversal(root.right)
  2. 如果root的val大于high的話,就處理root的左子樹(因為右子樹一定不符合了),返回左子樹修剪之后的結果,也就是return traversal(root.left)
  3. 如果root的val處于區間之間,需要修剪他的左右子樹,也就是root.left = traversal(root.left),右邊子樹同理。
    終止條件:如果為null,返回null

方法一 遞歸法

class Solution(object):def trimBST(self, root, low, high):""":type root: TreeNode:type low: int:type high: int:rtype: TreeNode"""if root == None: return Noneif root.val < low: return self.trimBST(root.right,low,high)if root.val > high:return self.trimBST(root.left,low,high)if root.val<= high and root.val>=low:root.left = self.trimBST(root.left,low,high)root.right = self.trimBST(root.right,low,high)return root

方法二 迭代法

108.將有序數組轉換為二叉搜索樹

在這里插入圖片描述
本題掌握遞歸法就夠了,遞歸法比較復雜,升級版本;

思路

遞歸三部曲

  1. 傳入返回值:傳入的是指向數組的指針,和范圍;函數返回的是由這個范圍內的數組構成的二叉樹的根節點
  2. 終止條件:如果傳入的數組范圍中left>right,那就返回none
  3. 單層遞歸邏輯:找到中間節點,作為root,root-left為左邊區間構建的二叉樹,右邊同理

注意點

  1. . 為了保證構造的是平衡二叉樹,所以根節點是中間的值
  2. . 注意傳入的數組范圍區間:本題中定義的是左閉右閉

方法一 遞歸法

寫代碼注意點:

  1. 因為是左閉右閉的,所以判斷迭代終止條件為left大于right
  2. 傳入的只是數組,而不是節點,這個要注意
class Solution(object):def traversal(self,left,right):if left > right: return None mid = (left + right)//2node = TreeNode(val = self.nums[mid])node.left = self.traversal(left,mid-1)node.right = self.traversal(mid+1,right)return nodedef sortedArrayToBST(self, nums):""":type nums: List[int]:rtype: TreeNode"""self.nums = numsroot = self.traversal(0,len(nums)-1)return root# 精簡版 傳遞切片class Solution:def sortedArrayToBST(self, nums: List[int]) -> Optional[TreeNode]:if not nums:returnmid = len(nums) // 2root = TreeNode(nums[mid])root.left = self.sortedArrayToBST(nums[:mid])root.right = self.sortedArrayToBST(nums[mid + 1 :])return root       

方法二 迭代法

本題迭代法比較困難,就不用放了。

538.把二叉搜索樹轉換為累加樹

在這里插入圖片描述
題目的意思是:將二叉樹中某節點的新的值為原先樹中大于這個節點的數的值的累加。

思路

總體思路:很簡單,右中左遍歷就行。定義一個全局變量累加

方法一

class Solution(object):def __init__(self):self.count = 0def traversal(self,root):if root == None: return Noneif root.right: self.traversal(root.right)self.count += root.valroot.val = self.countif root.left: self.traversal(root.left)return rootdef convertBST(self, root):""":type root: TreeNode:rtype: TreeNode"""re = self.traversal(root)return re

方法二



總結

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

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

相關文章

【C++刷題】優選算法——位運算

常見位運算操作總結&#xff1a; 基礎位運算 &&#xff1a;有0則為0 |&#xff1a;有1則為1 ^&#xff1a;相同為0&#xff0c;相異為1 / 無進位相加運算符的優先級 管它什么優先級&#xff0c;加括號就完事兒了給一個數 n&#xff0c;確定它的二進制表示中的第 i (默認是從…

【基本數據結構】平衡二叉樹

文章目錄 前言平衡二叉樹1 簡介2 旋轉2.1 左旋2.2 右旋2.3 何時旋轉 3 插入節點4 刪除節點5 代碼 參考資料寫在最后 前言 本系列專注更新基本數據結構&#xff0c;現有以下文章&#xff1a; 【算法與數據結構】數組. 【算法與數據結構】鏈表. 【算法與數據結構】哈希表. 【…

【斯坦福因果推斷課程全集】1_隨機對照試驗1

目錄 The average treatment effect Difference-in-means estimation IID Sampling and Population Asymptotics Example: The linear model Regression adjustments with a linear model 隨機對照試驗&#xff08;RCT&#xff09;是統計因果推論的基礎。如果有的話&#…

關于FPGA 使用SPI FLASH固化時如何配置固化參數

關于FPGA 使用SPI FLASH固化時如何配置固化參數 EDA工具&#xff1a;Vivado 關于FPGA 使用SPI FLASH固化時如何配置固化參數一、引言二、如何設置固化參數&#xff1a;使用50M的速度 &#xff0c;SPI為X4 &#xff0c;以及bit壓縮第一&#xff1a;點open implenment design第二…

Android之onMeasure的三種模式

Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {super.onMeasure(widthMeasureSpec, heightMeasureSpec);}在 Android 中&#xff0c;onMeasure() 方法是 View 或 ViewGroup 中的一個重要方法&#xff0c;用于測量視圖的大小。在 onMeasure(…

安裝軟件缺少dll文件怎么辦,分享多種解決dll問題的方法

在計算機使用過程中&#xff0c;我們經常會遇到安裝軟件時提示缺少dll文件的問題。這種情況通常會導致軟件無法正常運行或啟動。為了解決這個問題&#xff0c;我總結了以下五種方法&#xff0c;希望對大家有所幫助。 一&#xff0c;了解DLL文件是什么 動態鏈接庫&#xff08;D…

簡單說說我對集成學習算法的一點理解

概要 集成學習&#xff08;Ensemble Learning&#xff09;是一種機器學習技術框架&#xff0c;它通過構建并結合多個學習器&#xff08;也稱為個體學習器或基學習器&#xff09;來完成學習任務。 集成學習旨在通過組合多個基學習器的預測結果來提高整體模型的性能。每個基學習…

常見儀表盤指示燈的含義,這次夠全了!

汽車是當前主要的交通工具之一&#xff0c;給人們的工作、生活提供了便利。大家在學會開車的同時&#xff0c;也得了解一些基本的汽車常識&#xff0c;可以及時的發現車輛的問題&#xff0c;并作出正確的判斷&#xff0c;以此降低車輛的損耗和維修成本。其中最基本的&#xff0…

房產證上加名?手把手教你操作,省錢又省心!

隨著《民法典》的實施&#xff0c;房產的權屬問題愈發受到重視。夫妻雙方及其親屬常希望能在房產證上增添自己的名字&#xff0c;以保障各自的權益。那么&#xff0c;房產證上到底能寫幾個名字呢&#xff1f;以下是對這一問題的詳細解答。 一、房產證命名無固定限制 在購房時&…

準確-K8s系列文章-修改containerd 默認數據目錄

修改 Kubernetes 集群中 containerd 默認數據目錄為 /data/containerd 前言 本文檔適用于 Kubernetes 1.24 及以上版本的集群,介紹如何將 containerd 默認的數據目錄從 /var/lib/containerd 修改為 /data/containerd。 步驟 1. 停止 containerd 服務(慎重!!!需評估風險!…

iOS中的UIScene和UISceneDelegate

目錄 ???????前言 一、AppDelegate和SceneDelegate的關系 1.AppDelegate 2.SceneDelegate 3.info.plist配置 4.生命周期方法對比 1.應用啟動 2.進入前臺 3.進入后臺 5.何時使用AppDelegate和SceneDelegate 1.AppDelegate 2.SceneDelegate 前言 在iOS 13及之…

Linux內核編程入門:深度探索與實戰挑戰

Linux內核編程入門&#xff1a;深度探索與實戰挑戰 在操作系統的心臟地帶&#xff0c;Linux內核以其強大、靈活和開源的特性吸引著眾多程序員。對于那些渴望深入了解系統底層機制并親手塑造操作系統的勇士們&#xff0c;Linux內核編程無疑是一個極具挑戰性和吸引力的領域。本文…

民國漫畫雜志《時代漫畫》第39期.PDF

時代漫畫39.PDF: https://url03.ctfile.com/f/1779803-1248636473-6bd732?p9586 (訪問密碼: 9586) 《時代漫畫》的雜志在1934年誕生了&#xff0c;截止1937年6月戰爭來臨被迫停刊共發行了39期。 ps: 資源來源網絡!

Qt for Android : 使用libusb做CH340x串口傳輸的底層USB庫

簡介 Qt for Android自帶的串口方案并沒有適用在高的API版本中&#xff0c; 會出現permission denied的訪問問題&#xff0c; 所以就需要使用Android API&#xff0c; 也就是在CPP中使用JNI方式進行調用&#xff0c; 為了開發的方便&#xff0c; 使用libusb庫作為替代的底層usb…

SpringBoot注解--10--@Bean,對象注入的三種方法

提示&#xff1a;文章寫完后&#xff0c;目錄可以自動生成&#xff0c;如何生成可參考右邊的幫助文檔 文章目錄 Bean一、如何使用方法注解注意Bean 的命名規則&#xff0c;當沒有設置 name 屬性時&#xff0c;那么 bean 默認的名稱就是方法名&#xff0c;當設置了 name 屬性之后…

解析Java中1000個常用類:Runnable 類,你學會了嗎?

在 Java 編程中,處理并發和多線程是一個重要的主題。為了簡化多線程編程,Java 提供了多種工具和類,其中最基本的一個工具就是 Runnable 接口。 Runnable 接口為創建和管理線程提供了一種標準的方式。本文將詳細介紹 Runnable 接口的定義、實現原理、應用場景,并通過示例展…

33【Aseprite 作圖】樹——拆解

1 樹葉 畫樹葉真累啊&#xff0c;可以先畫一個輪廓&#xff0c;細節一點點修 2 1 2 &#xff1b;2 2 2 &#xff08;橫著橫&#xff09;&#xff0c;這樣一點點畫樹葉 填充顏色&#xff0c;用了噴霧工具 2 樹干部分 輪廓部分&#xff0c;左邊的是3 3 3 &#xff1b;上下都是…

網頁音頻提取在線工具有哪些 網頁音頻提取在線工具下載

別再到處去借會員賬號啦。教你一招&#xff0c;無視版權和地區限制&#xff0c;直接下載網頁中的音頻文件。沒有復雜的操作步驟&#xff0c;也不用學習任何代碼。只要是網頁中播放的音頻文件&#xff0c;都可以把它下載到本地保存。 一、網頁音頻提取在線工具有哪些 市面上的…

【數據結構】二叉樹:簡約和復雜的交織之美

專欄引入&#xff1a; 哈嘍大家好&#xff0c;我是野生的編程萌新&#xff0c;首先感謝大家的觀看。數據結構的學習者大多有這樣的想法&#xff1a;數據結構很重要&#xff0c;一定要學好&#xff0c;但數據結構比較抽象&#xff0c;有些算法理解起來很困難&#xff0c;學的很累…

Transformer中的位置編碼PE(position encoding)

Transformer中的位置編碼PE(position encoding) 1.提出背景 transformer模型的attention機制并沒有包含位置信息&#xff0c;即一句話中詞語在不同的位置時在transformer中是沒有區別的 2.解決背景 給encoder層和decoder層的輸入添加了一個額外的向量Positional Encoding&a…