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

對于算法題,按題型類別刷題才會更有成效,因此我這里在網上搜索并參考了下 “🔥 LeetCode 熱題 HOT 100” 的題型歸類,并在其基礎上做了一定的完善,希望能夠記錄自己的刷題歷程,有所收獲!點擊下發鏈接跳轉~??????

🔥 LeetCode 熱題 HOT 100【題型歸類匯總,助力刷題】

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

??

給你一個整數數組?nums?,其中元素已經按?升序?排列,請你將其轉換為一棵?高度平衡?二叉搜索樹。

高度平衡?二叉樹是一棵滿足「每個節點的左右兩個子樹的高度差的絕對值不超過 1 」的二叉樹。

示例 1:

輸入:nums = [-10,-3,0,5,9]
輸出:[0,-3,9,-10,null,5]
解釋:[0,-10,5,null,-3,null,9] 也將被視為正確答案:

示例 2:

輸入:nums = [1,3]
輸出:[3,1]
解釋:[1,null,3] 和 [3,1] 都是高度平衡二叉搜索樹。

提示:

  • 1 <= nums.length <= 104
  • -104 <= nums[i] <= 104
  • nums?按?嚴格遞增?順序排列

思路:參考?LeetCode題解

  • 二叉搜索樹BST 的【中序遍歷】是升序的,因此本題等同于根據中序遍歷的序列恢復二叉搜索樹
  • 雖然我們可以以升序序列中的任一個元素作為根節點

  • 但是因為本題要求【高度平衡】,因此我們需要選擇升序序列的【中間元素】作為根節點奧~

時間復雜度:O(n),其中?n?是數組的長度。每個數字只訪問一次。

空間復雜度:O(logn),其中 n?是數組的長度。空間復雜度不考慮返回值,因此空間復雜度主要取決于遞歸棧的深度,遞歸棧的深度是 O(log?n)。

/*** Definition for a binary tree node.* type TreeNode struct {*     Val int*     Left *TreeNode*     Right *TreeNode* }*/
// 參考題解:https://leetcode.cn/problems/convert-sorted-array-to-binary-search-tree/solutions/313508/jian-dan-di-gui-bi-xu-miao-dong-by-sweetiee/?envType=study-plan-v2&envId=top-100-liked
// BST 的【中序遍歷】是升序的,因此本題等同于根據中序遍歷的序列恢復二叉搜索樹
// 雖然我們可以以升序序列中的任一個元素作為根節點
// 但是因為本題要求【高度平衡】,因此我們需要選擇升序序列的【中間元素】作為根節點奧~
func sortedArrayToBST(nums []int) *TreeNode {var dfs func(l, r int) *TreeNodedfs = func(l, r int) *TreeNode {if l > r {return nil}mid := l + (r-l)/2root := &TreeNode{}root.Val = nums[mid]root.Left = dfs(l, mid-1) // r向左,即中間位置移動root.Right = dfs(mid+1, r) // l向右,即向中間位置移動return root}return dfs(0, len(nums)-1)
}

題目擴展:

  • 109. 有序鏈表轉換二叉搜索樹
  • 將本題的數組換成了鏈表,做法完全一樣,不過鏈表無法像數組一樣直接索引到中間元素,鏈表找中間節點可以用快慢指針法,詳見:876. 鏈表的中間結點。

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

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

相關文章

點滴生活記錄2

我從小跟著我爺爺奶奶&#xff0c;小學六年級轉到縣城上小學&#xff0c;就沒跟我奶奶他們住一起了。十一回家&#xff0c;把奶奶接到我這住&#xff0c;細想&#xff0c;自六年級之后&#xff0c;就很少跟奶奶住一起了。 奶奶&#xff08;間歇性&#xff09;耳聾&#xff0c;為…

104. 二叉樹的最大深度

給定一個二叉樹 root &#xff0c;返回其最大深度。二叉樹的最大深度 是指從根節點到最遠葉子節點的最長路徑上的節點數。 深度就是在層序遍歷的基礎上&#xff0c;每層遍歷一次&#xff0c;就增加一次深度&#xff01; import java.util.ArrayList; import java.util.LinkedL…

軟件測試相關

軟件測試是什么&#xff1f; 使用人工和自動手段來運行或測試某個系統的過程&#xff0c;其目的在于驗證它是否滿足規定的需求或弄清預期結果與實際結果的差別。 為什么做軟件測試&#xff1f;目的是什么&#xff1f; 發現軟件存在的代碼或業務邏輯錯誤 檢驗產品是否符合用戶需…

堅鵬:中國郵政儲蓄銀行數字化轉型戰略、方法與案例培訓

中國郵政儲蓄銀行擁有優良的資產質量和顯著的成長潛力&#xff0c;是中國領先的大型零售銀行。2016年9月在香港聯交所掛牌上市&#xff0c;2019年12月在上交所掛牌上市。中國郵政儲蓄銀行擁有近4萬個營業網點&#xff0c;服務個人客戶超6.5億戶。2022年&#xff0c;在《銀行家》…

算法Day24 不專心開車

不專心開車 Description 小碩開車經過一條公路&#xff0c;這條路線總共由n 1個不同海拔的點組成。小碩從海拔為0的點0開始騎行。 給小碩一個長度為n的整數數組arr&#xff0c;其中arr[i]是點i和點i 1的凈海拔高度差&#xff08;0≤i < n&#xff09;。請你返回最高點的海…

【LeetCode刷題-二叉樹】--110.平衡二叉樹

110.平衡二叉樹 方法一&#xff1a;自頂向下遞歸 對于當前遍歷到的節點&#xff0c;首先計算左右子樹的高度&#xff0c;如果左右子樹的高度差是否不超過 111&#xff0c;再分別遞歸地遍歷左右子節點&#xff0c;并判斷左子樹和右子樹是否平衡。這是一個自頂向下的遞歸的過程。…

力扣:197. 上升的溫度(Python3)

題目&#xff1a; 表&#xff1a; Weather ------------------------ | Column Name | Type | ------------------------ | id | int | | recordDate | date | | temperature | int | ------------------------ id 是該表具有唯一值的列。 該表…

[NAND Flash] 1.1 閃存(NAND Flash) 學習指南

依公知及經驗整理&#xff0c;原創保護&#xff0c;禁止轉載。 專欄 《深入理解NAND Flash》 ? 回首 漠然回首&#xff0c;從事存儲芯片行業已多年&#xff0c;這些年寶貴的青春都獻給了閃存。 我剛入行的時候&#xff0c;也是萌新一個&#xff0c;彷佛大學學的都沒有和這相…

Kubernetes簡介與部署

一、Kubernetes 簡介 1、概念&#xff1a; Kubernetes 又稱 k8s&#xff0c;是一個可移植、可擴展的開源平臺&#xff0c;用于管理容器化應用和服務&#xff0c;通過 Kubernetes 能夠進行應用的自動化部署和擴縮容。(k8s不是容器&#xff0c;而是一套容器編排系統) 官網&…

RC522(RFID射頻模塊)讀卡ID的簡單應用

文章目錄 一、RFID是什么&#xff1f;二、RC522模塊三、使用步驟1.硬件1.硬件連接2.引腳定義 2.軟件1.初始化配置代碼如下&#xff08;示例&#xff09;&#xff1a;2.引腳配置代碼如下&#xff08;示例&#xff09;&#xff1a;3.模塊復位代碼如下&#xff08;示例&#xff09…

11、虛函數、多態、純虛函數

11、虛函數、多態、純虛函數 虛函數覆蓋調用 多態實現多態的兩個必要條件多態 和 this指針多態的實現&#xff1a;虛函數表虛函數表與動態綁定動態綁定動態綁定對性能的影響 純虛函數抽象類純抽象類 虛函數 形如class 類名{ virtual 返回值 函數名(形參表) { … } }; 的成員函…

C++筆記之Delegate和委托構造(Delegating constructor)

C筆記之Delegate和委托構造辨析 code review! —— 杭州 2023-12-10 文章目錄 C筆記之Delegate和委托構造辨析0.有道詞典&#xff1a;英語發音1.ChatGPT&#xff1a;delegate概念詳解2.Delegate和“將可調用對象作為函數參數”是不是一回事&#xff1f;3.C的Delegate示例4.…

Numpy矩陣(第16講)

Numpy矩陣(第16講) ??????? ??博主 侯小啾 感謝您的支持與信賴。?? ??????????????????????????????????????????????????????????????????????????????????????????…

認識計算機的設備管理

在計算機系統中&#xff0c;除了處理器和內存之外&#xff0c;其他的大部分硬設備稱為外部設備。它包括輸入/輸出設備&#xff0c;輔存設備及終端設備等。這些設備種類繁多&#xff0c;特性各異&#xff0c;操作方式的差異很大&#xff0c;從而使操作系統的設備管理變得十分繁雜…

【數據結構】哈希表算法總結

知識概覽&#xff08;哈希表&#xff09; 哈希表可以將一些值域較大的數映射到較小的空間內&#xff0c;通常用x mod 質數的方式進行映射。為什么用質數呢&#xff1f;這樣的質數還要離2的整數冪盡量遠。這可以從數學上證明&#xff0c;這樣沖突最小。取余還是會出現沖突情況。…

《三十一》開發模式構建工具 Vite

20的40分鐘之前還沒看。 20的1小時15分 基于 Vite2。 在實際開發中&#xff0c;編寫的代碼往往是不能被瀏覽器直接識別的&#xff0c;例如 ES6、React、Vue、TypeScript 等&#xff0c;必須通過構建工具來對代碼進行轉換、編譯&#xff0c;例如 Webpack、Rolluop、Vite 等。 V…

c++模板學習筆記

模板 函數模板類模板 函數模板 函數模板的格式為&#xff1a; template<typename T1,typename T2...> 函數返回值類型 函數名(參數列表) {//函數體 }typename是定義模板參數的關鍵字&#xff0c;可以使用class來代替&#xff08;不能使用struct&#xff09; 函數模板本…

【數據結構 — 排序 — 選擇排序】

數據結構 — 排序 — 選擇排序 一.選擇排序1.基本思想2.直接選擇排序2.1算法講解2.2.代碼實現2.2.1.函數定義2.2.2.算法接口實現2.2.3.測試代碼實現2.2.4.測試展示 3.堆排序3.1.算法講解3.2.代碼實現3.2.1.函數定義3.2.2.算法接口實現3.2.3.測試代碼實現3.2.4.測試展示 一.選擇…

Docker創建mqtt容器mosquitto

#1.創建映射到主機的配置文件/bwss/agent/docker/mosquitto_public/config/mosquitto.conf 內容為&#xff1a; listener 51883 0.0.0.0 # 0.0.0.0 allow_anonymous false persistence false persistence_location /mosquitto/data password_file /mosquitto/config/passwd …

Java 8 新特性深度解析:探索 Lambda 表達式、Stream API 和函數式編程的革新之路

Java8 新特性 Java 8 的革新之路 自 1995 年首次發布以來&#xff0c;Java 已經成為世界上最廣泛使用的編程語言之一。隨著時間的推移&#xff0c;Java 經歷了多次版本更新&#xff0c;其中最具里程碑意義的便是 Java 8 的發布。這個版本引入了許多重大變革&#xff0c;包括 …