力扣257. 二叉樹的所有路徑(遞歸回溯與迭代)

題目:

給你一個二叉樹的根節點?root?,按?任意順序?,返回所有從根節點到葉子節點的路徑。

葉子節點?是指沒有子節點的節點。

示例 1:

輸入:root = [1,2,3,null,5]
輸出:["1->2->5","1->3"]

示例 2:

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

提示:

  • 樹中節點的數目在范圍?[1, 100]?內
  • -100 <= Node.val <= 100

思路:?

這道題目要求從根節點到葉子的路徑,所以需要前序遍歷(中左右),這樣才方便讓父節點指向孩子節點,找到對應的路徑。

先用遞歸的方法來做,走過的路徑用path來表示,每遍歷一個節點就加入到path中,遞歸遍歷節點

遞歸完,要做回溯,因為path 不能一直加入節點,它還要刪節點,然后才能加入新的節點。此時就需要用到回溯來刪走過的節點,回溯和遞歸是一一對應的,有一個遞歸,就要有一個回溯。

代碼及思路:

遞歸回溯:

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = rightclass Solution:def binaryTreePaths(self, root: Optional[TreeNode]) -> List[str]:# 定義一個列表來存儲路徑path = []# 定義一個列表來存儲結果result = []# 如果根節點為空,直接返回結果列表if not root:return result# 進行前序遍歷self.traversal(root, path, result)return resultdef traversal(self, node, path, result):# 將當前節點的值加入路徑中   path.append(node.val)# 如果當前節點是葉子節點,將路徑轉化為字符串并加入結果列表中  (中)if not node.left and not node.right:spath = '->'.join(map(str, path))result.append(spath)return# 如果有左子節點,進行遞歸遍歷,并將左子節點從路徑中彈出  (左)if node.left:self.traversal(node.left, path, result)path.pop()   # 回溯# 如果有右子節點,進行遞歸遍歷,并將右子節點從路徑中彈出  (右)if node.right:   self.traversal(node.right, path, result)path.pop()   # 回溯

迭代法:

# 定義二叉樹節點的類
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = rightclass Solution:def binaryTreePaths(self, root: Optional[TreeNode]) -> List[str]:# 使用棧來存儲節點stack = [(root)]# 使用棧來存儲路徑path_st = [str(root.val)]result = []while stack:# 彈出節點node = stack.pop()# 彈出路徑path = path_st.pop()# 如果節點沒有左右子節點,說明到達葉子節點,將路徑加入結果中if not node.left and not node.right:result.append(path)# 如果有右子節點,將右子節點和路徑加入棧中if node.right:stack.append(node.right)path_st.append(path + '->' + str(node.right.val))# 如果有左子節點,將左子節點和路徑加入棧中if node.left:stack.append(node.left)path_st.append(path + '->' + str(node.left.val))return result

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

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

相關文章

[隴劍杯 2021]簡單日志分析

[隴劍杯 2021]簡單日志分析 題目做法及思路解析&#xff08;個人分享&#xff09; 問一&#xff1a;某應用程序被攻擊&#xff0c;請分析日志后作答&#xff1a; 黑客攻擊的參數是______。&#xff08;如有字母請全部使用小寫&#xff09;。 題目思路&#xff1a; 分析…

C++牛客知識點2

提示&#xff1a;接上文 文章目錄 前言一、pandas是什么&#xff1f;二、使用步驟 1.引入庫2.讀入數據總結 前言 提示&#xff1a;這里可以添加本文要記錄的大概內容&#xff1a; 例如&#xff1a;隨著人工智能的不斷發展&#xff0c;機器學習這門技術也越來越重要&#xff0…

http與https的區別,以及生產環境配置https的幾種方式

http HTTP(超文本傳輸協議)是一種用于傳輸和處理超文本文檔的協議。HTTP使用客戶端-服務器模型。客戶端通過HTTP請求協議向服務器發送請求&#xff0c;服務器則使用HTTP響應協議返回響應。HTTP協議通常使用TCP/IP作為底層傳輸協議&#xff0c;但它也可以使用其他傳輸協議。 H…

sql注入學習

基礎查詢語句&#xff1a; 給指定字段添加數據 insert into 表名(字段名1,字段名2,.....) values(值1,值2,......); 給全部字段添加數據 insert into 表名 values (值1,值2,.....);--無限制條件的修改,會修改整張表 update 表名 set 字段 值; --有限制條件的修改,只修改特定記…

軟件設計師——計算機網絡(二)

&#x1f4d1;前言 本文主要是【計算機網絡】——軟件設計師——計算機網絡的文章&#xff0c;如果有什么需要改進的地方還請大佬指出?? &#x1f3ac;作者簡介&#xff1a;大家好&#xff0c;我是聽風與他&#x1f947; ??博客首頁&#xff1a;CSDN主頁聽風與他 &#x1…

Promise介紹和使用

Promise Promise是一門新的技術&#xff08;ES6規范&#xff09;&#xff0c;JS中進行異步編程的新解決方案。&#xff08;舊的方案是使用回調函數&#xff0c;比如AJAX請求&#xff09;。 從語法上來說Promise是一個構造函數。 從功能上來說Promise對象用來封裝一個異步操作并…

生成式AI賦能千行百業加速創新,2023亞馬遜云科技re:Invent行業盤點

2023亞馬遜云科技re:Invent全球大會已于上周圓滿閉幕&#xff0c;在本次大會中&#xff0c;亞馬遜云科技又為大家帶來了很多功能/項目迭代更新&#xff0c;也重磅發布了很多全新的功能。今天從行業視角來盤點回顧哪些重磅發布適用于垂直行業客戶&#xff0c;以及面向汽車、制造…

ChatGLM3-6B和langchain阿里云部署

提示&#xff1a;文章寫完后&#xff0c;目錄可以自動生成&#xff0c;如何生成可參考右邊的幫助文檔 文章目錄 前言一、ChatGLM3-6B部署搭建環境部署GLM3 二、Chatglm2-6blangchain部署三、Tips四、總結 前言 提示&#xff1a;這里可以添加本文要記錄的大概內容&#xff1a; …

ffmpeg之ffprobe.c源碼分析一---大流程及核心代碼分析

文章目錄 前言為什么學習ffprobe源碼源碼調試main()函數重要流程函數分析open_input_file函數分析avformat_match_stream_specifier函數分析read_packets函數分析本篇文章帶你打通ffprobe源碼的脈絡。 關注公眾號免費看: 前言 注:本文章全憑個人經驗以及平時學習所記錄,由…

gdal合成多個波段

def synthesis_bands(dst_list, outfile):"""將多光譜波段合成一個tif:param dst_list: 輸入待合成文件的列表:param outfile: 影像的輸出文件夾"""dataset_init gdal.Open(dst_list[0])# 創建待輸出的圖tiff_driver gdal.GetDriverByName(GTi…

【MySQL進階】索引使用

一、索引使用 1.驗證索引效率 tb_sku 這張表中準備了 1000w 的記錄。 我用夸克網盤分享了「1000w的模擬數據」鏈接&#xff1a;https://pan.quark.cn/s/15cf665202b2 這張表中id為主鍵&#xff0c;有主鍵索引&#xff0c;而其他字段是沒有建立索引的。 我們先來查詢其中的…

JS基礎之原型原型鏈

JS基礎之原型&原型鏈 原型&原型鏈構造函數創建對象prototypeprotoconstructor實例與原型原型的原型原型鏈其他constructorproto繼承 原型&原型鏈 構造函數創建對象 我們先使用構造函數創建一個對象&#xff1a; function Person(){ } var person new Person();…

多窗口文件管理工具Q-Dir安裝以及使用教程

軟件介紹 Q-Dir 是一款功能強大的Windows資源管理器&#xff0c;可以非常方便的管理你的各種文件。Q-Dir有4 個窗口&#xff0c;特別適用于頻繁在各個目錄間跳躍復制粘貼的情況&#xff0c;每個窗口都可以方便的切換目錄&#xff0c;以不同顏色區分不同類型的文件&#xff0c;…

(企業項目)微服務項目解決跨域問題:

前后端分離項目中前端出現了跨域的問題 在網關模塊配置文件中添加 配置 application.properties # 允許請求來源&#xff08;老版本叫allowedOrigin&#xff09; spring.cloud.gateway.globalcors.cors-configurations.[/**].allowedOriginPatterns* # 允許攜帶的頭信息 spri…

idea__SpringBoot微服務06——靜態資源(新依賴),首頁和圖標定制

靜態資源 一、靜態資源二、首頁和圖標定制————————創作不易&#xff0c;如覺不錯&#xff0c;隨手點贊&#xff0c;關注&#xff0c;收藏(*&#xffe3;︶&#xffe3;)&#xff0c;謝謝~~ 新依賴&#xff1a;jquery的 <dependency><groupId>org.webjars&…

說說設計體系、風格指南和模式庫

目錄 一、定義 二、設計體系 2.1 Design system 2.2 風格指南 2.3 Component 三、樣式庫 一、定義 設計體系&#xff08;Design system&#xff09;&#xff1a;可共享的設計語言的基礎合集&#xff0c;包含了設計價值&#xff0c;語義&#xff0c;語法和上下文。 風格…

matplotlib 默認屬性和繪圖風格

matplotlib 默認屬性 一、繪圖風格1. 繪制疊加折線圖2. Solarize_Light23. _classic_test_patch4. _mpl-gallery5. _mpl-gallery-nogrid6. bmh7. classic8. fivethirtyeight9. ggplot10. grayscale11. seaborn12. seaborn-bright13. seaborn-colorblind14. seaborn-dark15. sea…

Chart 7 內存優化

文章目錄 前言7.1 Adreno GPU OpenCL內存7.1.1 內存聲明周期7.1.2 Loacl Memory7.1.3 Constant memory(常量內存)7.1.4 Private Memory7.1.5 Global Memory7.1.5.1 Buffer Object7.1.5.2 Image Object7.1.5.3 Image object vs. buffer object7.1.5.4 Use of both Image and buf…

C語言數據結構-雙向鏈表

文章目錄 1 雙向鏈表的結構2 雙向鏈表的實現2.1 定義雙向鏈表的數據結構2.2 打印鏈表2.3 初始化鏈表2.4 銷毀鏈表2.5 尾插,頭插2.6 尾刪,頭刪2.7 根據頭次出現數據找下標2.8 定點前插入2.9 刪除pos位置2.10 定點后插入 3 完整代碼3.1 List.h3.2 Lish.c3.3 test.c 1 雙向鏈表的結…

ajax中get和post的區別,datatype返回的數據類型有哪些?web開發中數據提交的幾種方式,有什么區別。百度使用哪種方式?

在Ajax中&#xff0c;GET和POST是兩種常見的HTTP請求方法。它們有以下區別&#xff1a; GET請求&#xff1a;使用GET請求時&#xff0c;參數數據會附加在URL的末尾&#xff0c;以查詢字符串的形式發送給服務器。GET請求是冪等的&#xff0c;也就是說多次發送相同的GET請求&…