面試熱題(二叉樹的鋸齒形層次遍歷)

給你二叉樹的根節點?root?,返回其節點值的?鋸齒形層序遍歷?。(即先從左往右,再從右往左進行下一層遍歷,以此類推,層與層之間交替進行)

輸入:root = [3,9,20,null,null,15,7]
輸出:[[3],[20,9],[15,7]]

? ? ? ?大家一定對樹的層序遍歷已經能夠耳熟能詳了吧,這道題其實就在二叉樹的層序遍歷的基礎上對它的結果進行了一點點的修改

? ? ? ?通過大家的仔細觀察不難發現:是將結果集中的索引為奇數的數組進行了一次翻轉,我們就可以利用模擬,它讓做什么,我們就做什么的方法進行解決(樹的程層序遍歷是一定要會的,最好是可以進行默寫甚至是進行手撕)

       public List<List<Integer>> zigzagLevelOrder(TreeNode root) {List<List<Integer>> list=new ArrayList<>();if(root==null){return list;}Queue<pair> queue=new LinkedList<>();queue.offer(new pair(root,0));while(!queue.isEmpty()){pair pair=queue.poll();TreeNode node=pair.node;int level=pair.level;if(list.size()==level){list.add(new ArrayList<>());}List<Integer> item=list.get(level);item.add(node.val);if(node.left!=null){queue.offer(new pair(node.left,level+1));}if(node.right!=null){queue.offer(new pair(node.right,level+1));}}return list;}public class pair{private TreeNode  node;private Integer level;public pair(TreeNode node,Integer level){this.level=level;this.node=node;}}

接下來我們對其結果數組進行操作:

 for (int i = 0; i <list.size(); i++) {if(i%2==1){Collections.reverse(list.get(i));}

? ? ? ?這樣的這道題就完美的結束了,一般讀題的時候都想想可以用我們所熟悉的數據結構或者是模板去以出發點去進行思考,這樣的話可以事半功倍

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

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

相關文章

MySQL數據庫-字符串函數詳解

前言 MySQL數據庫提供了多種不同類型的函數&#xff0c;用于處理字符串、日期、數值等數據類型&#xff0c;以及實現條件、聚合等操作&#xff0c;下面我們主要介紹字符串函數 CONCAT() 函數 CONCAT() 可用于將多個字符串連接在一起。 示例&#xff1a; SELECT CONCAT(Hell…

C++ STL stack queue

目錄 一.stack 介紹 二.stack 使用 三.stack 模擬實現 普通版本&#xff1a; 適配器版本&#xff1a; 四.queue的介紹 五. queue使用 六.queue模擬實現 七.deque介紹 1.容器適配器 2.deque的簡單介紹 3.deque的缺陷 4.為什么選擇deque作為stack和queue的底層默認容…

System.Text.Encoding不同字符編碼之間進行轉換

System.Text.Encoding 是 C# 中用于處理字符編碼和字符串與字節之間轉換的類。它提供了各種靜態方法和屬性&#xff0c;用于在不同字符編碼之間進行轉換&#xff0c;以及將字符串轉換為字節數組或反之。 在處理多語言文本、文件、網絡通信以及其他字符數據的場景中&#xff0c…

Spring Boot 獲取前端參數

Spring Boot 獲取前端參數 在開發 Web 應用程序時&#xff0c;前端參數是非常重要的。Spring Boot 提供了多種方法來獲取前端參數&#xff0c;本文將介紹其中的一些常用方法。 1. 使用 RequestParam 注解 RequestParam 注解是 Spring MVC 提供的一種常用方式&#xff0c;用于…

C++ 函數

函數是一組一起執行一個任務的語句。每個 C 程序都至少有一個函數&#xff0c;即主函數 main() &#xff0c;所有簡單的程序都可以定義其他額外的函數。 您可以把代碼劃分到不同的函數中。如何劃分代碼到不同的函數中是由您來決定的&#xff0c;但在邏輯上&#xff0c;劃分通常…

pycharm調整最大堆發揮最大

python程序運行時&#xff0c;怎么提高效率&#xff0c;設置pycharm最大堆過程如下&#xff1b; 一、進入設置pycharm最大堆&#xff1b; 二、進入設置pycharm最大堆&#xff1b; 如果8g設置為6g左右&#xff0c;占75%左右最佳

5個實用的 Vue 技巧

在這篇文章中&#xff0c;我們將探討五個實用的 Vue 技巧&#xff0c;這些技巧可以使你日常使用 Vue 編程更高效、更富有成效。無論你是Vue的初學者還是經驗豐富的開發者&#xff0c;這些技巧都能幫助你編寫更清晰、更簡潔、更有效的代碼。那么&#xff0c;讓我們開始吧。 1. …

9.1 C++ STL 排序、算數與集合

C STL&#xff08;Standard Template Library&#xff09;是C標準庫中的一個重要組成部分&#xff0c;提供了豐富的模板函數和容器&#xff0c;用于處理各種數據結構和算法。在STL中&#xff0c;排序、算數和集合算法是常用的功能&#xff0c;可以幫助我們對數據進行排序、統計…

【JVM】JVM中的分代回收

文章目錄 分代收集算法什么是分代分代收集算法-工作機制MinorGC、 Mixed GC 、 FullGC的區別是什么 分代收集算法 什么是分代 在java8時&#xff0c;堆被分為了兩份&#xff1a; 新生代和老年代【1&#xff1a;2】 其中&#xff1a; 對于新生代&#xff0c;內部又被分為了三…

eclipse常用設置

1、調整編輯頁面字體大小 窗口 (Window)- 首選項&#xff08;Preferences&#xff09;- 常規&#xff08;General&#xff09;- 外觀 (Appearence)- 顏色與字體 (Colors And Fonts)&#xff0c;在右邊的對話框里選擇 Java - Java Editor Text Font&#xff0c;點擊出現的修改&…

【ARM 嵌入式 編譯系列 3.3 -- gcc 動態庫與靜態庫的鏈接方法介紹】

文章目錄 1.1 GCC 鏈接器 LD 介紹1.1.1 GCC 鏈接器 LD 常用參數介紹1.2 動態庫和靜態庫介紹1.2.1 動態庫和靜態庫優缺點1.2.2 庫文件鏈接方式1.2.3 ldd 工具介紹1.2.4 靜態庫鏈接時搜索路徑順序1.2.5 動態庫鏈接時、執行時搜索路徑順序1.2.6 頭文件搜索路徑1.2.7 有關環境變量上…

Neo4j之Aggregation基礎

在 Neo4j 中&#xff0c;聚合&#xff08;Aggregation&#xff09;是對數據進行計算、匯總和統計的過程。以下是一些使用聚合函數的常見例子&#xff0c;以及它們的解釋&#xff1a; 計算節點數量&#xff1a; MATCH (p:Person) RETURN count(p) AS totalPersons;這個查詢會計…

Socks5代理在多線程爬蟲中的應用

在進行爬蟲開發過程中&#xff0c;我們常常需要處理大量的數據&#xff0c;并執行多任務并發操作。然而&#xff0c;頻繁的請求可能會引起目標網站的反爬機制&#xff0c;導致IP封禁或限制訪問。為了規避這些限制&#xff0c;我們可以借助Socks5代理的強大功能&#xff0c;通過…

Nginx反向代理技巧

跨域 作為一個前端開發者來說不可避免的問題就是跨域&#xff0c;那什么是跨域呢&#xff1f; 跨域&#xff1a;指的是瀏覽器不能執行其他網站的腳本。它是由瀏覽器的同源策略造成的&#xff0c;是瀏覽器對javascript施加的安全限制。瀏覽器的同源策略是指協議&#xff0c;域名…

2011-2021年數字普惠金融指數Bartik工具變量法(含原始數據和Bartik工具變量法代碼)

2011-2021年數字普惠金融指數Bartik工具變量法&#xff08;含原始數據和Bartik工具變量法代碼&#xff09; 1、時間&#xff1a;2011-2020&#xff08;省級、城市&#xff09;&#xff0c;2014-2020&#xff08;區縣&#xff09; 2、原始數據來源&#xff1a;北大金融研究中心…

npm的鏡像源和代理的查看和修改

一、鏡像源 查詢當前鏡像源 npm get registry 設置為淘寶鏡像 npm config set registry http://registry.npm.taobao.org/ 設置回默認的官方鏡像 npm config set registry https://registry.npmjs.org/ 設置electron為淘寶鏡像 npm config set ELECTRON_MIRROR "h…

Redis對象類型和結構、內存回收、對象共享

對象類型和結構 在Redis中&#xff0c;無論是鍵key還是值value都是一個對象&#xff0c;每次對Redis數據庫創建一個新的鍵值對時&#xff0c;就至少會創建兩個對象。 常見的對象類型有&#xff1a; 字符串列表哈希集合有序集合 這些對象在Redis中統一用一個結構體redisObjec…

VS2019生成的DLL,給QT(MinGW版本)使用的小結

VS2019端&#xff1a; a 基于生成一個DLL的工程&#xff08;要注意生成是x86&#xff0c;還是x64的&#xff0c;需要和后面的QT的App工程對應&#xff09;&#xff0c;這里不多解釋了&#xff0c;網上多的是&#xff1b; b 在cpp實現文件里&#xff0c;假如要導出一個這樣的…

Git如何上傳文件到github

Git下載網址&#xff1a; https://git-scm.com/downloads 1. 新建一個空文件夾&#xff0c;用來上傳文件&#xff0c;第一次需創建&#xff0c;以后無需創建 2. 點進去空文件夾&#xff0c;鼠標右鍵&#xff0c;使用Git Bash Here 打開 3. 克隆遠程倉庫&#xff1a;git cl…

深入理解JVM——垃圾回收與內存分配機制詳細講解

所謂垃圾回收&#xff0c;也就是要回收已經“死了”的對象。 那我們如何判斷哪些對象“存活”&#xff0c;哪些已經“死去”呢&#xff1f; 一、判斷對象已死 1、引用計數算法 給對象中添加一個引用計數器&#xff0c;每當有一個地方引用它時&#xff0c;計數器就加一&…