leecode 637 二叉樹的層平均值

leetcode 二叉樹相關-層序遍歷專題

二叉樹的層序遍歷一般來說,我們是利用隊列來實現的,先把根節點入隊,然后在出隊后將其對應的子節點入隊,然后往復此種操作。相比于二叉樹的遍歷遞歸,層序遍歷比較簡單,有些題目用想不出遞歸的解法,用層序遍歷也是可以解答。我個人覺得層序遍歷可以按照這個模板:

class Solution {public void levelOrder(TreeNode root) {Queue<TreeNode> q = new LinkedList<>();q.offer(root);while (!q.isEmpty()) {int sz = q.size();while (sz-- > 0) {TreeNode node = q.poll();if (node.left != null) q.offer(node.left);if (node.right != null) q.offer(node.right);}}}
}

下面以leetcode上的相關題目來解答

leecode 102 二叉樹的層序遍歷
題目鏈接 :https://leetcode.cn/problems/binary-tree-level-order-traversal/description/
題目

給你二叉樹的根節點 root ,返回其節點值的 層序遍歷 。 (即逐層地,從左到右訪問所有節點)。
在這里插入圖片描述

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

示例 2:
輸入:root = [1]
輸出:[[1]]

示例 3:
輸入:root = []
輸出:[]

提示:
樹中節點數目在范圍 [0, 2000] 內
-1000 <= Node.val <= 1000

解題思路

直接套模板解答

class Solution {public List<List<Integer>> levelOrder(TreeNode root) {List<List<Integer>> res = new ArrayList<>();if (root == null) return res;Queue<TreeNode> q = new LinkedList<>();q.offer(root);while (!q.isEmpty()) {int sz = q.size();List<Integer> tmp = new ArrayList<>();while (sz-- > 0) {TreeNode node = q.poll();tmp.add(node.val);if (node.left != null) q.offer(node.left);if (node.right != null) q.offer(node.right);}res.add(new ArrayList<>(tmp));}return res;}
}
leecode 107 二叉樹的層序遍歷||
題目鏈接 :https://leetcode.cn/problems/binary-tree-level-order-traversal-ii/description/
題目

給你二叉樹的根節點 root ,返回其節點值 自底向上的層序遍歷 。 (即按從葉子節點所在層到根節點所在的層,逐層從左向右遍歷)

在這里插入圖片描述
示例 1:
輸入:root = [3,9,20,null,null,15,7]
輸出:[[15,7],[9,20],[3]]

示例 2:
輸入:root = [1]
輸出:[[1]]

示例 3:
輸入:root = []
輸出:[]

提示:
樹中節點數目在范圍 [0, 2000] 內
-1000 <= Node.val <= 1000

解題思路

相當于是在leetcode102的解答上對結果進行翻轉

class Solution {public List<List<Integer>> levelOrderBottom(TreeNode root) {List<List<Integer>> res = new ArrayList<>();if (root == null) return res;Deque<TreeNode> q = new LinkedList<>();q.offer(root);while (!q.isEmpty()) {int sz = q.size();List<Integer> path = new ArrayList<>();while (sz > 0) {TreeNode node = q.poll();path.add(node.val);if (node.left != null) q.offer(node.left);if (node.right != null) q.offer(node.right);sz--;}res.add(path);}List<List<Integer>> result = new ArrayList<>();for (int i = res.size() - 1; i >=0 ; i--) { //翻轉result.add(res.get(i));}return result;}
}
leecode 199 二叉樹的右視圖
題目鏈接 :https://leetcode.cn/problems/binary-tree-right-side-view/description/
題目

給定一個二叉樹的 根節點 root,想象自己站在它的右側,按照從頂部到底部的順序,返回從右側所能看到的節點值。

示例 1:
在這里插入圖片描述

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

示例 2:
輸入: [1,null,3]
輸出: [1,3]

示例 3:
輸入: []
輸出: []

提示:
二叉樹的節點個數的范圍是 [0,100]
-100 <= Node.val <= 100

解題思路

還是直接套模板,就是在當層隊列大小取出最后一個節點的時候進行處理。

class Solution {public List<Integer> rightSideView(TreeNode root) {List<Integer> res = new ArrayList<>();if (root == null) return res;Deque<TreeNode> q = new LinkedList<>();q.offer(root);while (!q.isEmpty()) {int sz = q.size();for (int i = 0; i < sz; i++) {TreeNode node = q.poll();if (node.left != null) q.offer(node.left);if (node.right != null) q.offer(node.right);if (i == sz - 1) {res.add(node.val);}}}return res;}
}
leecode 637 二叉樹的層平均值
題目鏈接 :https://leetcode.cn/problems/average-of-levels-in-binary-tree/description/
題目

給定一個非空二叉樹的根節點 root , 以數組的形式返回每一層節點的平均值。與實際答案相差 10-5 以內的答案可以被接受。

示例 1:
在這里插入圖片描述

輸入:root = [3,9,20,null,null,15,7]
輸出:[3.00000,14.50000,11.00000]
解釋:第 0 層的平均值為 3,第 1 層的平均值為 14.5,第 2 層的平均值為 11 。
因此返回 [3, 14.5, 11] 。

示例 2:
在這里插入圖片描述

輸入:root = [3,9,20,15,7]
輸出:[3.00000,14.50000,11.00000]

提示:
樹中節點數量在 [1, 104] 范圍內
-231 <= Node.val <= 231 - 1

解題思路

直接套模板解答,在當成節點處理完后,計算并記錄其平均值

class Solution {public List<Double> averageOfLevels(TreeNode root) {List<Double> res = new ArrayList<>();if (root == null) return res;Deque<TreeNode> q = new LinkedList<>();q.offer(root);while (!q.isEmpty()) {int sz = q.size();double sum = 0;for (int i = 0; i < sz; i++) {TreeNode node = q.poll();sum += node.val;if (node.left != null) q.offer(node.left);if (node.right != null) q.offer(node.right);}res.add(sum / sz);}return res;}
}

還有一些相關題目也是在模板基礎上進行處理,后續看情況出第二遍層序遍歷題目專題。

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

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

相關文章

CHI協議_1

作者&#xff1a;someone鏈接&#xff1a;https://www.zhihu.com/question/304259901/answer/3455648666來源。 1. AMBA CHI簡介 一致性總線接口&#xff08;CHI&#xff09;是AXI一致性擴展&#xff08;ACE&#xff09;協議的演進。它是Arm的AMBA總線的一部分。AMBA是一種免…

美團Java社招面試題真題,最新面試題

如何處理Java中的內存泄露&#xff1f; 1、識別泄露&#xff1a; 使用內存分析工具&#xff08;如Eclipse Memory Analyzer Tool、VisualVM&#xff09;來識別內存泄露的源頭。 2、代碼審查&#xff1a; 定期進行代碼審查&#xff0c;關注靜態集合類屬性和監聽器注冊等常見內…

VueJS ReactJS實現AI問答小助手(2)——流式TTS文字轉實時語音播放

TTS(Text-to-speech)文字轉語音使用的是阿里云的服務,文檔地址: https://help.aliyun.com/zh/isi/developer-reference/streaming-text-tts-wss 文檔只給出了一些配置項的說明,以及java端的代碼示例,但沒有web端的。所以這篇筆記可以給web開發者參考。 首先,AI答復的消息…

.NET File Upload

VS2022 .NET8 &#x1f4be;基礎上傳示例 view {ViewData["Title"] "File Upload"; }<h1>ViewData["Title"]</h1><form method"post" enctype"multipart/form-data" action"/Home/UploadFile"…

Android 系統日志(Log) JNI實現流程源碼分析

1、JNI概述 Java Native Interface (JNI) 是一種編程框架&#xff0c;使得Java代碼能夠與用其他編程語言&#xff08;如C和C&#xff09;編寫的本地代碼進行交互。JNI允許Java代碼調用本地代碼的函數&#xff0c;也允許本地代碼調用Java代碼的函數。下面是對JNI機制的詳細概述…

【單片機】STM32F070F6P6 開發指南(一)STM32建立HAL工程

文章目錄 一、基礎入門二、工程初步建立三、HSE 和 LSE 時鐘源設置四、時鐘系統&#xff08;時鐘樹&#xff09;配置五、GPIO 功能引腳配置六、配置 Debug 選項七、生成工程源碼八、生成工程源碼九、用戶程序下載 一、基礎入門 f0 pack下載&#xff1a; https://www.keil.arm…

【OpenCV 基礎知識 19】拉普拉斯變換

功能&#xff1a; cvLaplace 是計算圖像的 Laplacian 變換 &#xff0c;是Intel開源項目opencv中的函數 函數形式&#xff1a; void cvLaplace( const CvArr* src, CvArr* dst, int aperture_size3 ); 參數列表&#xff1a; Src 輸入圖像. Dst 輸出圖像. aperture_size算子內…

離線初始化k8s

導出和導入所有必要的 Kubernetes 鏡像&#xff0c;使用阿里云作為源。 在能訪問外網的機器上拉取鏡像 首先&#xff0c;在有外網訪問的機器上運行以下命令來拉取所有 Kubernetes v1.29.5 版本需要的鏡像&#xff1a; kubeadm config images pull --image-repository regist…

大模型應用:基于Golang實現GPT模型API調用

1.背景 當前OpenAI提供了開放接口&#xff0c;支持通過api的方式調用LLM進行文本推理、圖片生成等能力&#xff0c;但目前官方只提供了Python SDK。為了后續更方便集成和應用&#xff0c;可以采用Golang對核心推理調用接口進行封裝&#xff0c;提供模型調用能力。 2.相關準備…

Spark運行模式詳解

Spark概述 Spark 可以在多種不同的運行模式下執行&#xff0c;每種模式都有其自身的特點和適用場景。 部署Spark集群大體上分為兩種模式&#xff1a;單機模式與集群模式。大多數分布式框架都支持單機模式&#xff0c;方便開發者調試框架的運行環境。但是在生產環境中&#xff…

軟件web化的趨勢

引言 在信息技術飛速發展的今天&#xff0c;軟件Web化已成為一個不可忽視的趨勢。所謂軟件Web化&#xff0c;即將傳統的桌面應用軟件轉變為基于Web的應用程序&#xff0c;使用戶能夠通過瀏覽器進行訪問和使用。傳統軟件通常需要在用戶的計算機上進行安裝和運行&#xff0c;而W…

Cadence OrCAD學習筆記(3)capture使用技巧_1

本期介紹capture的一些使用技巧。資料來源于小破站up主硬小二 1、導出像Visio規格的圖紙 2、全局修改元件屬性 然后保存、關閉即可。 3、導出BOM 4、導出網表 5、元件自動編號 6、capture軟件和allegro關聯 7、新建原理圖symbol 以上為添加封裝庫的路徑 如果要創建多部分的sy…

積累|新質生產力之地方發展的不同賽道

“不要搞一種模式”。任何事物都是共性和個性的統一&#xff0c;也就是矛盾普遍性和特殊性的統一。就發展新質生產力而言&#xff0c;既要遵循新質生產力的普遍規律和共同特征&#xff0c;又要充分考慮各地、各產業的實際情況和特殊性&#xff0c;準確把握共性與個性。 總述 …

神器EasyRecovery2024中文電腦版下載!讓數據恢復不再難

在數字化時代&#xff0c;數據就是我們的財富。無論是重要的工作報告&#xff0c;還是那些珍貴的生活瞬間照片&#xff0c;或是我們與朋友間的聊天記錄&#xff0c;都儲存在我們的電腦或手機中。然而&#xff0c;有時候&#xff0c;意外總是突如其來&#xff0c;電腦突然崩潰&a…

C++Qt操作Lotus Domino數據庫 Lotus Domino C++連接Lotus Domino C++快速開發Lotus Domino

java連接domino C#連接domino python連接domino go連接domino,delphi連接domino Excel連接domino Flutter、微信小程序連接domino C 操作 Lotus Domino 數據庫&#xff1a;自動化與效率的結合 引言 在企業級應用中&#xff0c;Lotus Domino 提供了一個強大的協作平臺&#xff0…

【Linux】TCP協議【下一】{三次握手/四次揮手的深度解讀==狀態變化}

文章目錄 本篇知識需要有TCP協議【中】的知識&#xff01;詳情點擊&#x1f447;1.測試一&#xff1a;服務器start函數不定義任何行為&#xff08;不調用accept&#xff09;的三次握手狀態變化int listen(int sockfd, int backlog);的backlog參數全連接隊列當全連接隊列已滿&am…

BGP策略實驗(路徑屬性和選路規則)

要求&#xff1a; 1、使用preval策略&#xff0c;確保R4通過R2到達192.168.10.0/24 2、使用AS Path策略&#xff0c;確保R4通過R3到達192.168.11.0/24 3、配置MED策略&#xff0c;確保R4通過R3到達192.168.12.0/24 4、使用Local Preference策略&#xff0c;確保R1通過R2到達19…

Python輕松玩轉excel操作指導

目錄 一、一圖概覽 二、表格操作 三、內容操作 四、單元格操作 五、Pandas實現表格操作 六、常見場景示例 一、一圖概覽 ? ?本文主要對openpyxl庫的常用表格操作進行了梳理&#xff0c;熟練的運用后可極大地提升工作效率。 二、表格操作 #創建一個表格sheet.xlsx #…

LINQ(四) ——使用LINQ進行對象類型初始化

總目錄 C# 語法總目錄 上一篇&#xff1a;LINQ(三) ——查詢表達式/into關鍵字 LINQ 四 ——使用LINQ進行對象類型初始化 6. 使用LINQ進行對象初始化6.1 對象類型 6. 使用LINQ進行對象初始化 6.1 對象類型 需要聲明定義一個對象類&#xff0c;然后使用select 配合new關鍵字進…

C++編程揭秘:虛表機制與ABI兼容性的實例剖析

前言&#xff1a; 假設你的應用程序引用的一個庫某天更新了&#xff0c;雖然 API 和調用方式基本沒變&#xff0c;但你需要重新編譯你的應用程序才能使用這個庫&#xff0c;那么一般說這個庫是源碼兼容&#xff08;Source compatible&#xff09;&#xff1b;反之&#xff0c;如…