算法刷題記錄——LeetCode篇(2.2) [第111~120題](持續更新)

更新時間:2025-04-04

  • 算法題解目錄匯總:算法刷題記錄——題解目錄匯總
  • 技術博客總目錄:計算機技術系列博客——目錄頁

優先整理熱門100及面試150,不定期持續更新,歡迎關注!


114. 二叉樹展開為鏈表

給你二叉樹的根結點 root ,請你將它展開為一個單鏈表:

展開后的單鏈表應該同樣使用 TreeNode ,其中 right 子指針指向鏈表中下一個結點,而左子指針始終為 null
展開后的單鏈表應該與二叉樹 先序遍歷 順序相同。

示例 1:

輸入:root = [1,2,5,3,4,null,6]
輸出:[1,null,2,null,3,null,4,null,5,null,6]

示例 2:

輸入:root = []
輸出:[]

示例 3:

輸入:root = [0]
輸出:[0]

提示:

  • 樹中結點數在范圍 [0, 2000] 內
  • -100 <= Node.val <= 100

進階:
你可以使用原地算法(O(1) 額外空間)展開這棵樹嗎?

方法一:迭代先序遍歷(顯式棧)

利用棧模擬先序遍歷,維護前驅節點prev,實時修改指針建立鏈表。

  • 核心思想:利用棧按「根→右→左」順序壓入節點,確保彈出順序為「根→左→右」。
  • 指針調整:維護前驅節點prev,每次將prevright指向當前節點,并清空left指針。
  • 空間優化:棧的深度為樹高,平均空間復雜度為O(log n)

代碼實現(Java):

public class Solution {public void flatten(TreeNode root) {if (root == null) return;Stack<TreeNode> stack = new Stack<>();stack.push(root);TreeNode prev = null;while (!stack.isEmpty()) {TreeNode current = stack.pop();// 將前驅節點的right指向當前節點,left置空if (prev != null) {prev.right = current;prev.left = null;}prev = current;// 先壓入右子節點,再壓入左子節點(棧的LIFO特性)if (current.right != null) stack.push(current.right);if (current.left != null) stack.push(current.left);}}
}

方法二:遞歸后序遍歷(連接左右子樹)

遞歸處理左右子樹,將左子樹連接到右子樹之前,并更新末尾節點。

  • 核心思想:將左子樹末尾連接到右子樹頭部,再讓根節點指向左子樹。
  • 末尾處理:返回展開后的最后一個節點,避免每次遍歷鏈表末尾,時間復雜度優化至O(n)
  • 邏輯簡化:通過后序遍歷自底向上處理,確保左子樹完全展開后再處理根節點。

代碼實現(Java):

public class Solution {public void flatten(TreeNode root) {flattenHelper(root);}private TreeNode flattenHelper(TreeNode node) {if (node == null) return null;// 遞歸處理左右子樹,獲取展開后的末尾節點TreeNode leftTail = flattenHelper(node.left);TreeNode rightTail = flattenHelper(node.right);// 將左子樹插入到當前節點與右子樹之間if (node.left != null) {leftTail.right = node.right;node.right = node.left;node.left = null;}// 返回當前子樹展開后的最后一個節點return (rightTail != null) ? rightTail : (leftTail != null) ? leftTail : node;}
}

復雜度分析

  • 時間復雜度:兩種方法均為 O(n),每個節點被訪問一次。
  • 空間復雜度
    • 迭代法:O(h),h為樹高,最壞情況(鏈表結構)為O(n)
    • 遞歸法:O(h),遞歸棧深度為樹高。

對比總結

  • 迭代法:適合大規模數據或樹結構較深時,避免遞歸棧溢出。
  • 遞歸法:代碼簡潔,適合對代碼可讀性要求高,且無棧溢出風險的場景。

聲明

  1. 本文版權歸 CSDN 用戶 Allen Wurlitzer 所有,遵循CC-BY-SA協議發布,轉載請注明出處。
  2. 本文題目來源 力扣-LeetCode ,著作權歸領扣網絡所有。商業轉載請聯系官方授權,非商業轉載請注明出處。

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

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

相關文章

C語言學習筆記-9

九、結構體 構造類型&#xff1a; 不是基本類型的數據結構也不是指針類型&#xff0c; 它是若干個相同或不同類型的數據構成的集合 結構體類型&#xff1a; 結構體是一種構造類型的數據結構&#xff0c;是一種或多種基本類型或構造類型的數據的集合。 1.結構體類型定義 定…

Test——BUG篇

目錄 一軟件測試的生命周期 二BUG 1概念 2描述Bug 3Bug級別 4Bug的生命周期 三與開發人員發生爭執怎么辦 ?編輯1先自省&#xff1a;是否Bug描述不清晰 2站在用戶角度考慮并拋出問題 3Bug定級有理有據 4不僅要提出問題&#xff0c;還要給出解決方案 5Bug評審 5.1…

【Block總結】HWAB,半小波注意力塊|即插即用

論文信息 標題: HALF WAVELET ATTENTION ON M-NET+ FOR LOW-LIGHT IMAGE ENHANCEMENT 地址: arXiv:2203.01296 日期: 2022年3月 創新點 改進的分層架構 M-Net+: 提出了一個專為低光圖像增強設計的改良分層模型 M-Net+。該架構旨在緩解采樣過程中的空間信息損失問題。通過采用…

Spring 中的事務

&#x1f9fe; 一、什么是事務&#xff1f; &#x1f9e0; 通俗理解&#xff1a; 事務 一組操作&#xff0c;要么全部成功&#xff0c;要么全部失敗&#xff0c;不能只做一半。 比如你轉賬&#xff1a; A 賬戶扣錢B 賬戶加錢 如果 A 扣了錢但 B 沒收到&#xff0c;那就出問…

Flutter極速接入IM聊天功能并支持鴻蒙

Flutter極速接入IM聊天功能并支持鴻蒙 如果你們也是Flutter項目&#xff0c;想快速接入聊天&#xff0c;包括聊天的UI界面&#xff0c;強烈推薦這一家。因為我們已經完成了集成&#xff0c;使用非常穩定&#xff0c;集成也非常快捷方便。 而且&#xff0c;就在今天&#xff0c…

C# 類庫生成后自動復制到指定目錄

C# 類庫生成后自動復制到指定目錄 在C#中,當你開發了一個類庫項目(通常是.NET Core或.NET Framework項目),你可能會希望在構建(Build)完成后自動將生成的DLL文件復制到指定的目錄。有幾種方法可以實現這個需求,下面是一些常用的方法: 方法1:使用MSBuild的AfterBuild…

13-產品經理-產品多分支平臺管理

禪道16.0版本開始&#xff0c;優化和增強了產品的分支/平臺功能&#xff0c;主要特點如下&#xff1a; 多分支/平臺功能兼容各種大小型項目&#xff0c;項目/迭代可以關聯對應產品的某個分支/平臺。分支/平臺支持靈活管理&#xff0c;可以把分支/平臺理解為時間層面的概念&…

手搓多模態-04 歸一化介紹

在機器學習中&#xff0c;歸一化是一個非常重要的工具&#xff0c;它能幫助我們加速訓練的速度。在我們前面的SiglipVisionTransformer 中&#xff0c;也有用到歸一化層&#xff0c;如下代碼所示&#xff1a; class SiglipVisionTransformer(nn.Module): ##視覺模型的第二層&am…

Qt 入門 1 之第一個程序 Hello World

Qt 入門1之第一個程序 Hello World 直接上操作步驟從頭開始認識&#xff0c;打開Qt Creator&#xff0c;創建一個新項目&#xff0c;并依次執行以下操作 在Qt Creator中&#xff0c;一個Kits 表示一個完整的構建環境&#xff0c;包括編譯器、Qt版本、調試器等。在上圖中可以直…

深入理解MySQL:核心特性、優化與實踐指南

MySQL是一個開源的關系型數據庫管理系統(RDBMS)&#xff0c;由瑞典MySQL AB公司開發&#xff0c;目前屬于Oracle公司。它是目前世界上最流行的開源數據庫之一&#xff0c;廣泛應用于各種規模的Web應用和企業系統中。 目錄 一、核心特點 關系型數據庫&#xff1a; 開源免費&am…

Linux 系統安裝與優化全攻略:打造高效開發環境

一、開篇引言 &#xff08;一&#xff09;Linux 系統的廣泛應用 Linux 憑借其開源、穩定且安全的特性&#xff0c;在服務器、嵌入式設備以及開發環境等領域都有著極為廣泛的應用。 &#xff08;二&#xff09;撰寫本文的目的 為讀者提供一套全面且實用的指南&#xff0c;助…

代碼訓練day22回溯算法p1

1.組合 &#xff08;1&#xff09;模板 void backtracking(參數) {if (終止條件) {存放結果;return;}for (選擇&#xff1a;本層集合中元素&#xff08;樹中節點孩子的數量就是集合的大小&#xff09;) {處理節點;backtracking(路徑&#xff0c;選擇列表); // 遞歸回溯&#…

2024華為OD機試真題-任務最優調度(C++/Java/Python)-E卷-200分

2024華為OD機試最新E卷題庫-(D卷+E卷)-(JAVA、Python、C++) 目錄 題目描述 輸入描述 輸出描述 用例1 考點 題目解析 代碼 c++ java python 題目描述 給定一個正整數數組表示待系統執行的任務列表,數組的每一個元素代表一個任務,元素的值表示該任務的類型。請計算執…

每日習題:20250407

2025 2025 2025年 04 04 04月 06 06 06日 題目 1 設 X X X是實隨機變量&#xff0c;任意光滑的函數 f : R → R f:\mathbf{R} \rightarrow \mathbf{R} f:R→R&#xff0c;都有&#xff1a; E ( X f ( X ) ) E ( f ′ ( X ) ) E\left(Xf(X)\right)E\left(f(X)\right) E(Xf(X)…

TensorRT 有什么特殊之處

一、TensorRT的定義與核心功能 TensorRT是NVIDIA推出的高性能深度學習推理優化器和運行時庫&#xff0c;專注于將訓練好的模型在GPU上實現低延遲、高吞吐量的部署。其主要功能包括&#xff1a; 模型優化&#xff1a;通過算子融合&#xff08;合并網絡層&#xff09;、消除冗余…

JCR一區文章,壯麗細尾鷯鶯算法Superb Fairy-wren Optimization-附Matlab免費代碼

本文提出了一種新穎的基于群體智能的元啟發式優化算法——壯麗細尾鷯優化算法&#xff08;SFOA&#xff09;,SFOA從精湛的神仙鶯的生活習性中汲取靈感。融合了精湛的神仙鶯群體中幼鳥的發育、繁殖后鳥類喂養幼鳥的行為以及它們躲避捕食者的策略。通過模擬幼鳥生長、繁殖和攝食階…

使用Ubuntu18恢復群暉nas硬盤數據外接usb

使用Ubuntu18恢復群暉nas硬盤數據外接usb 1. 接入硬盤2.使用Ubuntu183.查看nas硬盤信息3. 掛載nas3.1 掛載損壞nas硬盤(USB)3.2 掛載當前運行的nas 4. 拷貝數據分批傳輸 5. 新舊數據對比 Synology NAS 出現故障&#xff0c;DS DiskStation損壞&#xff0c;則可以使用計算機和 U…

linux 安裝 mysql記錄

sudo apt-get install mysql-server 一直報錯&#xff0c;按照下面的終于安裝出來了 這個鏈接 https://cn.linux-console.net/?p13784 第 1 步&#xff1a;要刪除 MySQL 及其所有依賴項&#xff0c;請執行以下命令&#xff1a; sudo apt-get remove --purge mysql* 第 2 步…

UE5學習筆記 FPS游戲制作35 使用.csv配置文件

文章目錄 導入.csv要求首先創建一個結構體導入配置文件讀取配置 導入 .csv要求 第一行必須包含標題 第一列的內容必須不能重復&#xff0c;因為第一列會被當成行的名字&#xff0c;在數據處理中發揮類似于字典的key的作用 當前的配置文件內容如下 首先創建一個結構體 結構…

談談策略模式,策略模式的適用場景是什么?

一、什么是策略模式&#xff1f;?? 策略模式&#xff08;Strategy Pattern&#xff09;屬于??行為型設計模式??。核心思路是將一組??可替換的算法??封裝在獨立的類中&#xff0c;使它們可以在運行時動態切換&#xff0c;同時使客戶端代碼與具體算法解耦。它包含三個…