代碼隨想錄算法訓練營第十三天| 102. 二叉樹的層序遍歷、226.翻轉二叉樹、101. 對稱二叉樹

102. 二叉樹的層序遍歷

在這里插入圖片描述

題目鏈接:102. 二叉樹的層序遍歷
文檔講解:代碼隨想錄
狀態:dfs沒寫出來,bfs不知道如何分層

import java.util.*;public class BinaryTreeLevelOrderTraversal {// 用于存儲每一層的節點值List<List<Integer>> res = new LinkedList<>();// 使用深度優先搜索 (DFS) 進行層序遍歷public List<List<Integer>> levelOrder(TreeNode root) {if (root != null) {dfs(root, 0); // 從根節點開始,深度為0}return res;}// DFS輔助方法public void dfs(TreeNode root, int depth) {if (root == null) {return; // 如果當前節點為空,直接返回}if (res.size() == depth) {// 如果當前深度沒有對應的列表,創建一個新的列表res.add(new ArrayList<>());}// 將當前節點的值添加到對應深度的列表中res.get(depth).add(root.val);// 遞歸處理左子節點,深度加1dfs(root.left, depth + 1);// 遞歸處理右子節點,深度加1dfs(root.right, depth + 1);}// 使用廣度優先搜索 (BFS) 進行層序遍歷public List<List<Integer>> bfs(TreeNode root) {Deque<TreeNode> queue = new LinkedList<>(); // 使用雙端隊列來存儲節點if (root != null) {queue.addLast(root); // 將根節點加入隊列}while (!queue.isEmpty()) {// 獲取當前層的節點個數.// 重要!!!后面代碼中利用size--處理掉每層的結點后,隊列中剩下的結點就是下一層的結點int size = queue.size(); // 當前層的節點數ArrayList<Integer> list = new ArrayList<>(); // 用于存儲當前層的節點值while (size > 0) {TreeNode node = queue.pollFirst(); // 取出當前層的節點list.add(node.val); // 將節點值加入當前層的列表if (node.left != null) {queue.addLast(node.left); // 將左子節點加入隊列}if (node.right != null) {queue.addLast(node.right); // 將右子節點加入隊列}size--;}res.add(list); // 將當前層的節點值列表加入結果列表}return res;}
}// 定義樹節點類
class TreeNode {int val;TreeNode left;TreeNode right;TreeNode(int x) { val = x; }
}

226.翻轉二叉樹

在這里插入圖片描述

題目鏈接:226.翻轉二叉樹
文檔講解:代碼隨想錄
狀態:so easy

    // 使用遞歸方式進行二叉樹翻轉public TreeNode invertTree(TreeNode root) {if (root != null) {// 保存當前節點的左子節點TreeNode left = root.left;// 保存當前節點的右子節點TreeNode right = root.right;// 遞歸翻轉右子樹,并將其設為當前節點的左子節點root.left = invertTree(right);// 遞歸翻轉左子樹,并將其設為當前節點的右子節點root.right = invertTree(left);}// 返回翻轉后的根節點return root;}// 使用廣度優先搜索 (BFS) 進行二叉樹翻轉public TreeNode bfs(TreeNode root) {if (root != null) {// 創建一個雙端隊列來存儲節點Deque<TreeNode> deque = new LinkedList<>();// 將根節點加入隊列deque.addLast(root);// 當隊列不為空時,繼續處理while (!deque.isEmpty()) {int size = deque.size(); // 當前層的節點數// 遍歷當前層的所有節點while (size-- > 0) {// 取出當前層的節點TreeNode node = deque.pollFirst();// 翻轉當前節點的左右子節點TreeNode temp = node.left;node.left = node.right;node.right = temp;// 如果左子節點不為空,將其加入隊列if (node.left != null) {deque.add(node.left);}// 如果右子節點不為空,將其加入隊列if (node.right != null) {deque.add(node.right);}}}}// 返回翻轉后的根節點return root;}

101. 對稱二叉樹

在這里插入圖片描述

題目鏈接:101. 對稱二叉樹
文檔講解:代碼隨想錄
狀態:遞歸寫出來了,迭代沒寫出來

    // 判斷二叉樹是否對稱public boolean isSymmetric(TreeNode root) {if (root == null) {return true; // 如果根節點為空,則認為是對稱的}TreeNode left = root.left;TreeNode right = root.right;// 比較根節點的左右子樹是否對稱return compare(left, right);}// 輔助方法:比較兩個子樹是否對稱public boolean compare(TreeNode left, TreeNode right) {if (left == null && right == null) {return true; // 如果兩個子樹都為空,則對稱} else if (left == null || right == null) {return false; // 如果其中一個子樹為空,則不對稱} else {// 比較左子樹的左子樹與右子樹的右子樹,左子樹的右子樹與右子樹的左子樹,以及當前節點的值是否相等return compare(left.left, right.right) && compare(left.right, right.left) && left.val == right.val;}}
    public boolean isSymmetric(TreeNode root) {if (root == null || (root.left == null && root.right == null)) {return true;}Deque<TreeNode> stack = new LinkedList<>();stack.addLast(root.left);stack.addLast(root.right);while (!stack.isEmpty()) {TreeNode right = stack.pollLast();TreeNode left = stack.pollLast();// 如果兩個節點都為空,繼續下一次循環if (left == null && right == null) {continue;}// 如果一個節點為空,另一個節點不為空,則不對稱if (left == null || right == null) {return false;}// 如果兩個節點的值不相等,則不對稱if (left.val != right.val) {return false;}stack.addLast(left.left);stack.addLast(right.right);stack.addLast(left.right);stack.addLast(right.left);}return true;}

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

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

相關文章

rocketmq No route info of this topic 問題排查

Broker配置項 autoCreateTopicEnable true 如果是單節點(master),注釋掉這里的配置 #有三個值&#xff1a;SYNC_MASTER&#xff0c;ASYNC_MASTER&#xff0c;SLAVE&#xff1b;同步和異步表示Master和Slave之間同步數據的機制&#xff1b; #brokerRole SYNC_MASTER Pytho…

【2024最新華為OD-C/D卷試題匯總】[支持在線評測] 土地分配 (100分) - 三語言AC題解(Python/Java/Cpp)

?? 大家好這里是清隆學長 ,一枚熱愛算法的程序員 ? 本系列打算持續跟新華為OD-C/D卷的三語言AC題解 ?? ACM銀牌??| 多次AK大廠筆試 | 編程一對一輔導 ?? 感謝大家的訂閱? 和 喜歡?? ??在線評測鏈接 土地分配(100分) ?? 評測功能需要訂閱專欄后私信聯系清隆解…

阿里云盤手機批量修改文件名

背景 目前刷劇都會使用阿里云盤配合infuse,但是從網上找到的資源經常命名不符合Infuse的刮削規范,導致無法正確建立元數據,雖然PC端可以使用油猴腳本批量修改電視劇名稱, 但是經常出現身邊并沒有電腦(或者電腦上沒有油猴腳本)的情況,這時候用手機就很難批量修改文件名,雖然iph…

Etcd Raft架構設計和源碼剖析2:數據流

Etcd Raft架構設計和源碼剖析2&#xff1a;數據流 | Go語言充電站 前言 之前看到一幅描述etcd raft的流程圖&#xff0c;感覺非常直觀&#xff0c;但和自己看源碼的又有些不同&#xff0c;所以自己模仿著畫了一下&#xff0c;再介紹一下。 下圖從左到右依次分為4個部分&…

游戲心理學Day05

第三章 游戲即學習 《超級馬里奧》是游戲史上的經典之作&#xff0c;我們都記得第一次踩到敵人&#xff0c;第一次頂碎磚塊時的快樂&#xff0c;也記得為了通過某個關卡而付出的努力和艱辛。當我們掌握了規律和技巧之后&#xff0c;這些難題就不再是難題&#xff0c;因為我們習…

Windows 宿主機訪問 VirtualBox 虛擬機中創建的 docker 容器中的 mysql8.0 的數據

一、場景需求 在開發環境中&#xff0c;一般使用 windows 系統進行開發&#xff0c;但需要在 linux 系統中創建運行 mysql8.0 的 docker 容器中進行測試&#xff08;win10特定版本或win11才能安裝 docker&#xff09;&#xff0c;為了方便還需要在 windows 系統中通過 SQLyog …

植物大戰僵尸雜交版2.0.88最新版+防閃退工具V2+修改工具+高清工具

植物大戰僵尸雜交版&#xff0c;不僅繼承原作的經典玩法&#xff0c;而且引入了全新的植物融合玩法&#xff0c;將各式各樣的植物進行巧妙的雜交&#xff0c;孕育出前所未有、功能各異的全新植物。 創新的雜交合成系統 游戲引入了創新的雜交合成系統&#xff0c;讓玩家可以將不…

Unity DOTS技術(五)Archetype,Chunk,NativeArray

文章目錄 一.Chunk和Archetype什么是Chunk?什么是ArchType 二.Archetype創建1.創建實體2.創建并添加組件3.批量創建 三.多線程數組NativeArray 本次介紹的內容如下: 一.Chunk和Archetype 什么是Chunk? Chunk是一個空間,ECS系統會將相同類型的實體放在Chunk中.當一個Chunk…

JS包裝類:循環中為什么建議用變量存儲str.length進行循環判斷?

前言 在Javascript通常我們在遍歷一個字符串的時候通常使用的方式是 var str "abcdefg"; for(let i0;i<str.length;i){}但在最近的學習中&#xff0c;有人建議我最好應該是下面這樣執行。 var str "abcdefg"; for(let i0,len str.length;i<len;i)…

DP讀書:《ModelArts人工智能應用開發指南》(一)人工智能技術、應用平臺

怎么用ModelArts人工智能應用 訓練底座訓練案例 盤古礦山模型Main config.py 訓練底座 訓練案例 盤古礦山模型 Main 下面是快速助手 https://support.huaweicloud.com/qs-modelarts/modelarts_06_0006.html 準備開發環境 在ModelArts控制臺的“ 開發環境 > Notebook”頁面…

【C#學習筆記】屬性和字段

文章目錄 前言屬性和字段的區別字段訪問修飾符和關鍵字定義變量類型的定義變量命名變量的賦值 屬性 不同的使用情況 前言 最近在工作的過程中常常會覺得自己在程序設計方面的能力還是有欠缺。例如一直對于變量的聲明感到不足&#xff0c;在工作中為了圖方便總是直接public定義…

聲音突破:so 索

小孩兒看完武俠劇&#xff0c;就決定從二樓往地面上跳&#xff0c;年輕的老媽看到了&#xff0c;就在那里罵&#xff0c;喝斥不準逞能&#xff0c;不許亂來&#xff0c;不許跳。但小孩子不聽話&#xff0c;心里全是影視劇的畫面&#xff0c;那叫一個俠之能也&#xff0c;于是飛…

llvm 常用命令備忘

執行 IR 上的指令合并優化 pass $ opt –S –instcombine testfile.ll –o output1.ll 執行無效參數優化 pass $ opt –S –deadargelim testfile.ll –o output2.ll C 語言生成 IR 文件 $ clang -emit-llvm -S multiply.c -o multiply.ll C 語言生成 IR 文件 $ clang -cc1 -…

面向長文本處理的鍵值緩存壓縮技術:智能壓縮,無損性能,免微調

隨著輸入長度的增加&#xff0c;大型語言模型&#xff08;LLMs&#xff09;中的鍵值&#xff08;KV&#xff09;緩存需要存儲更多的上下文信息以維持性能&#xff0c;這導致內存消耗和計算時間急劇上升。KV緩存的增長對內存和時間效率的挑戰主要表現在兩個方面&#xff1a;一是…

使用JavaScript實現網頁通知功能

如何使用js來實現網頁通知功能。即使在用戶瀏覽其他頁面時&#xff0c;也能向他們推送通知信息。 廢話不多說直接上代碼 function showAutoNotification() {if ("Notification" in window) {Notification.requestPermission().then(function(permission) {if (permis…

元宇宙數字藏品交易所,未來發展的大趨勢

隨著科技的飛速進步&#xff0c;元宇宙以其獨特的魅力為數字世界繪制了一幅前所未有的宏偉藍圖。在這一宏大的背景下&#xff0c;數字藏品交易所作為連接虛擬與現實的橋梁&#xff0c;正以其卓越的優勢&#xff0c;引領著數字藏品市場邁向新的高度。 首先&#xff0c;元宇宙為…

Vue 的服務端渲染(SSR)有哪些鉤子可以用

在 Vue 的服務端渲染&#xff08;SSR&#xff09;過程中&#xff0c;并不會執行完整的生命周期鉤子&#xff0c;只有一部分鉤子會在服務器端執行。以下是 Vue SSR 中支持的生命周期鉤子&#xff1a; beforeCreate&#xff1a;在實例初始化之后&#xff0c;數據觀測 (data obser…

【ARM Cache 與 MMU 系列文章 7.8 – ARMv8/v9 MMU Table 表分配原理及其代碼實現 2】

文章目錄 MMU Table 表分配原理及其代碼實現MMU Table 分配代碼實現MMU Table 表分配原理及其代碼實現 在做映射的時候所映射的地址范圍最大只能是某一級 level table 中 entry 所能支持的最大范圍,如果超過這個范圍需要在對應 level table 中新增一個entry,這里還是以映射虛…

【相關概念】經濟金融中的Momentum

張張張三豐de思考與總結&#xff1a; 最近做的期貨價格泡沫中&#xff0c;一直在說&#xff0c;momentum&#xff0c;momentum&#xff0c;momentum&#xff0c;那么究竟什么是momentum呢&#xff1f; 目前&#xff0c;在有關期貨價格泡沫的研究文獻中&#xff0c;一般都是研究…

本輪牛市新趨勢,跟隨The First捕捉牛市Alpha

與以往牛市“百花齊放”的繁榮景象相比&#xff0c;本輪牛市頗具獨特走勢&#xff0c;呈現出了資金集中度高、財富聚集效應小的特點&#xff0c;絕大部分加密資產甚至跑不贏BTC的漲幅幅度。而以往大放色彩的公鏈幣價值幣的走勢&#xff0c;甚至比不過牛尾才爆發的MEME幣。這使得…