LeetCode熱題100--114. 二叉樹展開為鏈表--中等

1. 題目

給你二叉樹的根結點 root ,請你將它展開為一個單鏈表:

  • 展開后的單鏈表應該同樣使用 TreeNode ,其中 right 子指針指向鏈表中下一個結點,而左子指針始終為null 。
  • 展開后的單鏈表應該與二叉樹 先序遍歷 順序相同。

示例 1:
在這里插入圖片描述
輸入:root = [1,2,5,3,4,null,6]
輸出:[1,null,2,null,3,null,4,null,5,null,6]

示例 2:

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

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

2. 題解

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {public void flatten(TreeNode root) {while (root != null) { //左子樹為 null,直接考慮下一個節點if (root.left == null) {root = root.right;} else {// 找左子樹最右邊的節點TreeNode pre = root.left;while (pre.right != null) {pre = pre.right;} //將原來的右子樹接到左子樹的最右邊節點pre.right = root.right;// 將左子樹插入到右子樹的地方root.right = root.left;root.left = null;// 考慮下一個節點root = root.right;}}}
}

3. 解析

出自:詳細通俗的思路分析,多解法

1-3行:這是對TreeNode類的定義或者說結構體的定義,它是一棵二叉樹,其中每個節點最多有兩個子節點,一個左子節點和一個右子節點。如果沒有提供值、左子節點或右子節點,它們將默認為null。

7-23行:這些代碼定義了一個名為Solution的類,其中包含了一些與二叉樹相關的方法。這段代碼的主要功能是將二叉樹展開成鏈表形式。

8行:在展開二叉樹之前,會檢查根節點是否為null。如果為null,則直接返回,不需要進行任何操作。

10-23行:這是一個while循環,一直執行直到遇到一棵完全沒有左子樹的樹,此時root.left將為null,我們只需考慮右子樹即可。在這種情況下,代碼直接將根節點的值賦給根節點,然后將其右指針移到原來的右子樹上。

12-20行:如果左子樹不為空,那么找左子樹最右邊的節點。這個節點我們假設它為pre。

14-16行:將原來的右子樹接到左子樹的最右邊節點的右指針上。

18行:然后將左子樹移動到右子樹的位置,并置空左子樹。

20行:最后考慮下一個節點,也就是現在的根節點的右子節點。代碼會一直執行直到遇到一棵完全沒有左子樹的樹,此時root.left將為null,我們只需考慮右子樹即可。

在這段代碼中,我們使用了類似于后序遍歷(DFS)的方法來展開二叉樹。我們在處理每個節點時,都將其視作一個鏈表的一部分,然后再移動到下一個節點。這樣就可以將一棵二叉樹“展平”為一條單鏈表。

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

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

相關文章

REST API 設計最佳實踐指南 - 如何用 JavaScript、Node.js 和 Express.js 構建 REST API

過去幾年里,我創建并使用過很多 API。在此過程中,我遇到過各種好的和壞的實踐,也在開發和調用 API 時碰到過不少棘手的問題,但也有很多順利的時刻。 網上有很多介紹最佳實踐的文章,但在我看來,其中不少都缺…

MyCat

文章目錄18.1 MySQL 讀寫分離概述18.1.1 工作原理18.1.2 為什么要讀寫分離18.1.3 實現方式18.2 什么是 MyCat18.3 MyCat 安裝與配置1. 下載與解壓2. 創建用戶并修改權限3. 目錄說明4. Java 環境要求18.4 MyCat 啟動與配置1. 配置環境變量2. 配置 hosts(多節點集群&a…

使用 Spring Boot 搭建和部署 Kafka 消息隊列系統

使用 Spring Boot 搭建和部署 Kafka 消息隊列系統 摘要 本文將引導您在 Kafka 上搭建一個消息隊列系統,并整合到您的 Spring Boot 項目中。我們將逐步實現這一方案,探討其中的關鍵原理,避開可能遇到的坑,并最終將其部署到 Kuberne…

daily notes[45]

文章目錄basic knowledgereferencesbasic knowledge the variable in Rust is not changed. let x5; x6;Rust language promotes the concept that immutable variables are safer than variables in other programming language such as python and and are in favour of th…

技術奇點爆發周:2025 年 9 月科技突破全景掃描

技術奇點爆發周:2025 年 9 月科技突破全景掃描當中國 "祖沖之三號" 量子計算機在特定任務上超越經典超級計算機一千萬億倍的算力新聞,與 OpenAI 宣布 100 億美元定制芯片量產協議的消息在同一周密集爆發時,我們真切感受到了技術革命…

分布式專題——10.3 ShardingSphere實現原理以及內核解析

1 ShardingSphere-JDBC 內核工作原理當往 ShardingSphere 提交一個邏輯SQL后,ShardingSphere 到底做了哪些事情呢?首先要從 ShardingSphere 官方提供的這張整體架構圖說起:1.1 配置管控在 SQL 進入 ShardingSphere 內核處理(如解析…

移動語義的里里外外:從 std::move 的幻象到性能的現實

我們都已經聽過這樣的建議:“使用 std::move 來避免昂貴的拷貝,提升性能。” 這沒錯,但如果你對它的理解僅止于此,那么你可能正在黑暗中揮舞著一把利劍,既可能披荊斬棘,也可能傷及自身。 移動語義是 C11 帶…

selenium完整版一覽

selenium 庫驅動瀏覽器selenium庫是一種用于Web應用程序測試的工具,它可以驅動瀏覽器執行特定操作,自動按照腳本代碼做出單擊、輸入、打開、驗證等操作,支持的瀏覽器包括IE、Firefox、Safari、Chrome、Opera等。而在辦公領域中如果經常需要使用瀏覽器操作某些內容,就可以使用se…

[Linux]學習筆記系列 -- lib/kfifo.c 內核FIFO實現(Kernel FIFO Implementation) 高效的無鎖字節流緩沖區

文章目錄lib/kfifo.c 內核FIFO實現(Kernel FIFO Implementation) 高效的無鎖字節流緩沖區歷史與背景這項技術是為了解決什么特定問題而誕生的?它的發展經歷了哪些重要的里程碑或版本迭代?目前該技術的社區活躍度和主流應用情況如何?核心原理與…

MFC_Install_Create

1. 安裝MFC 編寫MFC窗口應用程序需要用到Visual Studiohttps://visualstudio.microsoft.com/zh-hans/,然后安裝,要選擇使用C的桌面開發,再點擊右邊安裝詳細信息中的使用C的桌面開發,往下滑,有一個適用于最新的v143生成…

Langchain4j開發之AI Service

學習基于Langchain4j的大模型開發需要學習其中Ai Service的開發模式。里面對大模型做了一層封裝&#xff0c;提供一些可以方便調用的api。其中有兩種使用Ai Service的方式。一.編程式開發1.首先引入Langchain4的依賴。<dependency><groupId>dev.langchain4j</gr…

認識神經網絡和深度學習

什么是神經網絡&#xff1f;什么又是深度學習&#xff1f;二者有什么關系&#xff1f;……帶著這些疑問&#xff0c;進入本文的學習。什么是神經網絡神經網絡&#xff08;Neural Network&#xff09;是一種模仿生物神經系統&#xff08;如大腦神經元連接方式&#xff09;設計的…

醫療行業安全合規數據管理平臺:構建高效協作與集中化知識沉淀的一體化解決方案

在醫療行業中&#xff0c;數據不僅是日常運營的基礎&#xff0c;更是患者安全、服務質量和合規管理的核心載體。隨著醫療業務的復雜化和服務模式的多元化&#xff0c;各類機構——從大型醫院到科研中心——都面臨著海量文檔、報告、影像資料和政策文件的管理需求。這些資料往往…

Day25_【深度學習(3)—PyTorch使用(5)—張量形狀操作】

reshape() squeeze()unsqueeze()transpose()permute()view() reshape() contiguous() reshape() 一、reshape() 函數保證張量數據不變的前提下改變數據的維度&#xff0c;將其轉換成指定的形狀。def reshape_tensor():data torch.tensor([[1, 2, 3], [4, 5, 6]])print(data…

第十八篇 開發網頁教學:實現畫布、繪畫、簡易 PS 方案

在網頁開發領域&#xff0c;畫布功能是實現交互創作的重要基礎&#xff0c;無論是簡單的繪畫工具&#xff0c;還是具備基礎修圖能力的簡易 PS 方案&#xff0c;都能為用戶帶來豐富的視覺交互體驗。本篇教學將圍繞 “學習 - 實踐 - 實操” 的核心思路&#xff0c;從技術原理講解…

封裝形成用助焊劑:電子制造“隱形橋梁”的技術突圍與全球產業重構

在5G通信、人工智能、新能源汽車等新興技術驅動下&#xff0c;全球電子制造業正以年均6.8%的增速重構產業鏈。作為電子元件焊接的核心輔料&#xff0c;封裝形成用助焊劑&#xff08;又稱電子封裝用助焊劑&#xff09;憑借其“優化焊接質量、提升可靠性、降低制造成本”的核心價…

【完整源碼+數據集+部署教程】零件實例分割系統源碼和數據集:改進yolo11-GhostHGNetV2

背景意義 研究背景與意義 隨著工業自動化和智能制造的迅速發展&#xff0c;零件的高效識別與分割在生產線上的重要性日益凸顯。傳統的圖像處理方法在處理復雜場景時往往面臨著準確性不足和實時性差的問題&#xff0c;而深度學習技術的引入為這一領域帶來了新的機遇。特別是基于…

墨色規則與血色節點:C++紅黑樹設計與實現探秘

前言? 前幾天攻克了AVL樹&#xff0c;我們已然是平衡二叉樹的強者。但旅程還未結束&#xff0c;下一個等待我們的&#xff0c;是更強大、也更傳奇的**終極BOSS**——紅黑樹。它不僅是map和set的強大心臟&#xff0c;更是C STL皇冠上的明珠。準備好了嗎&#xff1f;讓我們一…

大數據時代時序數據庫選型指南:為何 Apache IoTDB 成優選(含實操步驟)

在數字經濟加速滲透的今天&#xff0c;工業物聯網&#xff08;IIoT&#xff09;、智慧能源、金融交易、城市運維等領域每天產生海量 “帶時間戳” 的數據 —— 從工業設備的實時溫度、電壓&#xff0c;到電網的負荷波動&#xff0c;再到金融市場的每秒行情&#xff0c;這類 “時…

MAZANOKE+cpolar讓照片存儲無上限

文章目錄前言1. 關于MAZANOKE2. Docker部署3. 簡單使用MAZANOKE4. 安裝cpolar內網穿透5. 配置公網地址6. 配置固定公網地址總結當工具開始理解用戶的需求痛點時&#xff0c;MAZANOKE與cpolar這對搭檔給出了“輕量化”的解決方案。它不追求浮夸的功能堆砌&#xff0c;卻用扎實的…