LeetCode路徑總和系列問題解析:I、II、III的解決方案與優化

文章目錄

    • 引言
    • 一、路徑總和 I(LeetCode 112)
      • 問題描述
      • 方法思路
      • Java代碼實現
      • 復雜度分析
    • 二、路徑總和 II(LeetCode 113)
      • 問題描述
      • 方法思路
      • Java代碼實現
      • 復雜度分析
    • 三、路徑總和 III(LeetCode 437)
      • 問題描述
      • 方法思路
      • Java代碼實現
      • 復雜度分析
    • 四、對比與總結
      • 方法對比
      • 總結
    • 五、示例驗證
      • 路徑總和II示例
      • 路徑總和III示例

引言

路徑總和系列是二叉樹遍歷中的經典問題,涵蓋從基礎遞歸到高級優化的多種解法。本文詳細分析LeetCode中路徑總和I、II、III的解題思路,并提供Java實現代碼與優化技巧,幫助讀者深入理解二叉樹遍歷與回溯算法的應用。


一、路徑總和 I(LeetCode 112)

問題描述

判斷二叉樹中是否存在從根節點到葉子節點的路徑,使得路徑節點值之和等于給定目標數。

方法思路

  • 遞歸遍歷:深度優先搜索(DFS)遍歷每個節點。
  • 終止條件
    • 空節點直接返回false
    • 葉子節點判斷當前剩余值是否等于節點值。
  • 遞歸邏輯:對左右子樹遞歸檢查剩余目標值。

Java代碼實現

class Solution {public boolean hasPathSum(TreeNode root, int targetSum) {if (root == null) return false;if (root.left == null && root.right == null) {return targetSum == root.val;}return hasPathSum(root.left, targetSum - root.val) || hasPathSum(root.right, targetSum - root.val);}
}

復雜度分析

  • 時間復雜度:O(n),每個節點訪問一次。
  • 空間復雜度:O(n),遞歸棧深度在最壞情況下(樹退化為鏈表)為n。

二、路徑總和 II(LeetCode 113)

問題描述

找出所有從根節點到葉子節點路徑和等于目標數的路徑,返回路徑列表。

方法思路

  • 回溯法:通過動態維護路徑列表記錄當前路徑。
  • 關鍵步驟
    1. 添加當前節點到路徑。
    2. 到達葉子節點時檢查路徑和。
    3. 遞歸返回前移除當前節點(回溯)。

Java代碼實現

class Solution {public List<List<Integer>> pathSum(TreeNode root, int targetSum) {List<List<Integer>> result = new ArrayList<>();dfs(root, targetSum, new ArrayList<>(), result);return result;}private void dfs(TreeNode node, int remain, List<Integer> path, List<List<Integer>> result) {if (node == null) return;path.add(node.val);if (node.left == null && node.right == null && remain == node.val) {result.add(new ArrayList<>(path)); // 深拷貝路徑} else {dfs(node.left, remain - node.val, path, result);dfs(node.right, remain - node.val, path, result);}path.remove(path.size() - 1); // 回溯}
}

復雜度分析

  • 時間復雜度:O(n),每個節點訪問一次。
  • 空間復雜度:O(n2),存儲所有路徑的空間開銷。

三、路徑總和 III(LeetCode 437)

問題描述

統計路徑和等于目標數的路徑數量。路徑方向必須向下,但起點和終點不限制。

方法思路

  • 前綴和+哈希表優化
    • 記錄路徑前綴和及其出現次數。
    • 若當前前綴和為currentSum,查找currentSum - target是否存在。
  • 回溯維護:遞歸后需清理當前前綴和,避免影響其他子樹。

Java代碼實現

class Solution {private int count = 0;private Map<Long, Integer> prefixMap = new HashMap<>();public int pathSum(TreeNode root, int targetSum) {prefixMap.put(0L, 1); // 初始化空路徑dfs(root, 0L, targetSum);return count;}private void dfs(TreeNode node, long currentSum, int target) {if (node == null) return;currentSum += node.val;count += prefixMap.getOrDefault(currentSum - target, 0);prefixMap.put(currentSum, prefixMap.getOrDefault(currentSum, 0) + 1);dfs(node.left, currentSum, target);dfs(node.right, currentSum, target);prefixMap.put(currentSum, prefixMap.get(currentSum) - 1); // 回溯}
}

復雜度分析

  • 時間復雜度:O(n),每個節點訪問一次。
  • 空間復雜度:O(n),哈希表存儲前綴和。

四、對比與總結

方法對比

問題核心方法時間復雜度空間復雜度關鍵難點
路徑總和 I遞歸遍歷O(n)O(n)終止條件判斷
路徑總和 II回溯+路徑記錄O(n)O(n2)深拷貝與回溯邏輯
路徑總和 III前綴和+哈希表O(n)O(n)前綴和統計與回溯維護

總結

  1. 路徑總和I:基礎遞歸應用,理解終止條件與遞歸分解。
  2. 路徑總和II:掌握回溯法維護路徑狀態,注意深拷貝避免引用問題。
  3. 路徑總和III:前綴和優化是核心,通過空間換時間避免重復計算。

五、示例驗證

路徑總和II示例

輸入:

       5/ \4   8/   / \11  13  4/  \    / \7    2  5   1

目標值:22
輸出:[[5,4,11,2], [5,8,4,5]]

路徑總和III示例

輸入:

      10/  \5   -3/ \    \3   2   11/ \   \
3  -2   1

目標值:8
輸出:3(路徑為5→3, 5→2→1, -3→11


通過系統化分析與代碼實現,讀者可深入掌握二叉樹路徑問題的多種解法,提升算法設計與優化能力。

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

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

相關文章

NFC 碰一碰發視頻貼牌技術,音頻功能的開發實踐與技術解析

在數字化營銷與信息交互場景中&#xff0c;NFC 碰一碰技術憑借其便捷性和高效性&#xff0c;成為快速傳遞多媒體內容的新選擇。通過 NFC 實現視頻音頻的快速傳輸&#xff0c;不僅能提升用戶體驗&#xff0c;還能為各類場景帶來創新應用。本文將深入探討該功能開發過程中的關鍵技…

跨境電商生死劫:IP篩查三法則破解封號魔咒

一、血淚數據&#xff1a;90%封號案源于IP污染 跨境電商平臺風控系統持續升級&#xff0c;2023年亞馬遜全球封號案例中&#xff0c;67%涉及賬號關聯&#xff08;Marketplace Pulse數據&#xff09;&#xff0c;其中IP問題占比高達91%。更觸目驚心的是&#xff1a; 新號存活率&…

MIPS架構詳解:定義、應用與其他架構對比

一、MIPS架構的定義 MIPS&#xff08;Microprocessor without Interlocked Pipeline Stages&#xff09; 是一種經典的精簡指令集&#xff08;RISC&#xff09;處理器架構&#xff0c;由斯坦福大學John Hennessy團隊于1981年提出&#xff0c;強調高效流水線設計和硬件簡化。 核…

第十六屆藍橋杯 2025 C/C++組 脈沖強度之和

目錄 題目&#xff1a; 題目描述&#xff1a; 題目鏈接&#xff1a; 思路&#xff1a; 思路詳解&#xff1a; 代碼&#xff1a; 代碼詳解&#xff1a; 題目&#xff1a; 題目描述&#xff1a; 題目鏈接&#xff1a; P12338 [藍橋杯 2025 省 B/Python B 第二場] 脈沖強度…

從Ping到iperf3:深度實戰無線網絡壓測與優化指南

以下是測試無線網絡穩定性的詳細步驟與工具指南&#xff0c;涵蓋信號質量、吞吐量、干擾排查等關鍵維度&#xff1a; 一、基礎信號質量測試 1. 信號強度與覆蓋測試 工具&#xff1a;手機APP&#xff08;WiFi Analyzer、NetSpot&#xff09;或筆記本&#xff08;Acrylic WiFi&a…

MySQL 連接池 (Pool) 常用方法詳解

MySQL 連接池 (Pool) 常用方法詳解 1. 創建連接池 首先需要創建連接池實例&#xff1a; const mysql require(mysql2/promise); // 使用Promise版本const pool mysql.createPool({host: localhost,user: root,password: password,database: test,waitForConnections: true…

大型連鎖酒店集團數據湖應用示例

目錄 一、應用前面臨的嚴峻背景 二、數據湖的精細化構建過程 &#xff08;一&#xff09;全域數據整合規劃 &#xff08;二&#xff09;高效的數據攝取與存儲架構搭建 &#xff08;三&#xff09;完善的元數據管理體系建設 &#xff08;四&#xff09;強大的數據分析平臺…

GNU gettext 快速上手

文章目錄 1.簡介2.核心概念國際化 (i18n)本地化 (l10n)POT 文件PO 文件MO 文件文本域翻譯函數 3.主要組件4.使用示例參考文獻 1.簡介 GNU gettext 是一套用于軟件國際化&#xff08;internationalization&#xff0c;i18n&#xff09;和本地化&#xff08;localization&#x…

分享:VTK版本的選擇 - WPF空域問題

在早期版本中&#xff0c;ActiViz 對 Windows Presentation Foundation (WPF) 框架的支持是通過 WindowsFormHost 組件實現的&#xff0c;這種方式依賴于 WindowsForm 和 WPF 的互操作性。然而&#xff0c;這種方法存在一個眾所周知的“空域問題”&#xff08;airspace issue&a…

python數據分析(六):Pandas 多數據操作全面指南

Pandas 多數據操作全面指南&#xff1a;Merge, Join, Concatenate 與 Compare 1. 引言 在數據分析工作中&#xff0c;我們經常需要處理多個數據集并將它們以各種方式組合起來。Pandas 提供了多種強大的多數據操作方法&#xff0c;包括合并(merge)、連接(join)、連接(concaten…

spring 面試題

一、Spring 基礎概念 什么是 Spring 框架&#xff1f; Spring 是一個開源的 Java 應用程序框架&#xff0c;它提供了一種輕量級的、非侵入式的方式來構建企業級應用。Spring 的核心功能包括依賴注入&#xff08;Dependency Injection&#xff0c;DI&#xff09;、面向切面編程…

OpenCV-Python (官方)中文教程(部分一)_Day20

22.直方圖 22.1直方圖的計算,繪制與分析 使用 OpenCV 或 Numpy 函數計算直方圖 使用 Opencv 或者 Matplotlib 函數繪制直方圖 將要學習的函數有&#xff1a;cv2.calcHist(),np.histogram() 什么是直方圖呢&#xff1f;通過直方圖你可以對整幅圖像的灰度分布有一個整體的 了…

數電發票整理:免費實用工具如何高效解析 XML 發票數據

如今數字電子發票越來越普及&#xff0c;但是數電發票的整理還是頗有講究~ 今天給大家介紹一個 XML 發票閱讀器。使用它完全不收取任何費用&#xff0c;且無廣告干擾&#xff0c;對財務人員而言十分實用。 01 軟件介紹 這款軟件就是XML格式&#xff08;數電票&#xff09;閱讀…

深度學習正則化:原理、方法與應用深度解析

摘要 本文深入探討深度學習中的正則化技術&#xff0c;介紹其避免過擬合的重要性&#xff0c;詳細講解常見的正則化方法&#xff0c;如 L 1 L_1 L1?和 L 2 L_2 L2?正則化、Dropout等&#xff0c;并通過線性回歸案例和神經網絡訓練流程對其進行直觀闡釋。幫助讀者理解正則化原…

【爬蟲】deepseek談爬蟲工具

2025 年&#xff0c;隨著 Web 技術的演進和反爬機制的升級&#xff0c;工具生態也會進一步優化。以下是 2025 年爬蟲 & 自動化測試的前沿工具預測&#xff0c;結合行業趨勢和現有技術發展方向&#xff1a; &#x1f680; 2025 年推薦組合&#xff08;預測版&#xff09; 1…

SQLMesh 測試自動化:提升數據工程效率

在現代數據工程中&#xff0c;確保數據模型的準確性和可靠性至關重要。SQLMesh 提供了一套強大的測試工具&#xff0c;用于驗證數據模型的輸出是否符合預期。本文將深入探討 SQLMesh 的測試功能&#xff0c;包括如何創建測試、支持的數據格式以及如何運行和調試測試。 SQLMesh …

Java學習手冊:Spring 中常用的注解

一、組件注解 Component &#xff1a;用于標記一個類為 Spring 管理的 Bean&#xff0c;是 Spring 的基本組件注解。Spring 會通過類路徑掃描自動檢測并注冊標記了 Component 的類為 Bean。Service &#xff1a;是 Component 的派生注解&#xff0c;用于標記服務層類&#xff…

前端跨域問題詳解:原因、解決方案與最佳實踐

引言 在現代Web開發中&#xff0c;跨域問題是前端工程師幾乎每天都會遇到的挑戰。隨著前后端分離架構的普及和微服務的發展&#xff0c;跨域請求變得愈發常見。本文將深入探討跨域問題的本質、各種解決方案以及在實際開發中的最佳實踐。 一、什么是跨域問題&#xff1f; 1.1…

[計算機網絡]物理層

文章目錄 物理層的概述與功能傳輸介質雙絞線:分類:應用領域: 同軸電纜&#xff1a;分類: 光纖&#xff1a;分類: 無線傳輸介質&#xff1a;無線電波微波&#xff1a;紅外線&#xff1a;激光&#xff1a; 物理層設備中繼器&#xff1a;放大器&#xff1a;集線器(Hub)&#xff1a…

大連理工大學選修課——機器學習筆記(9):線性判別式與邏輯回歸

線性判別式與邏輯回歸 概述 判別式方法 產生式模型需要計算輸入、輸出的聯合概率 需要知道樣本的概率分布&#xff0c;定義似然密度的隱式參數也稱為基于似然的分類 判別式模型直接構造判別式 g i ( x ∣ θ i ) g_i(x|\theta_i) gi?(x∣θi?)&#xff0c;顯式定義判別式…