力扣面試150題-- 二叉樹展開為鏈表

Day 46

題目描述

在這里插入圖片描述

思路

初次做法:由于我直接考慮O(1)級別的空間復雜度,于是采取了以下做法:

  1. 接下來的內容就是遞歸函數
  2. 如果該節點為空,就返回null
  3. 將此時的current作為頭節點,left和right作為孩子節點,先左后右遍歷
  4. 此時我們就需要處理兒子節點的,如果此時左孩子不為空。我們就將原來的右孩子接到這個左孩子的向下遍歷的最后一個右孩子的后面,將左孩子變成右孩子(說著有點繞,看代碼就行)
/*** 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) {change(root);}private void change(TreeNode root) {if (root == null) return;// 保存原始左右子樹(防止遞歸中被修改)TreeNode left = root.left;TreeNode right = root.right;// 先遞歸處理左子樹(以current作為新的父節點)change(left);// 再遞歸處理右子樹(以current作為新的父節點)change(right);// 處理子節點:將左子樹的尾部連接到右子樹if (left != null) {// 找到左子樹的最右節點(鏈表尾部)TreeNode x = left;while (x.right != null) {x = x.right;}// 將左子樹的尾部連接到右子樹x.right = right;// 當前節點的右指針指向左子樹,左指針置空root.right = left;root.left = null;}}
}

題解做法
對于當前節點,如果其左子節點不為空,則在其左子樹中找到最右邊的節點,作為前驅節點,將當前節點的右子節點賦給前驅節點的右子節點,然后將當前節點的左子節點賦給當前節點的右子節點,并將當前節點的左子節點設為空。對當前節點處理結束后,繼續處理鏈表中的下一個節點,直到所有節點都處理結束。

class Solution {public void flatten(TreeNode root) {TreeNode curr = root;while (curr != null) {if (curr.left != null) {TreeNode next = curr.left;TreeNode predecessor = next;while (predecessor.right != null) {predecessor = predecessor.right;}predecessor.right = curr.right;curr.left = null;curr.right = next;}curr = curr.right;}}
}

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

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

相關文章

【Python】開發工具uv

文章目錄 1. uv install1.1 下載安裝腳本來安裝1.2 使用pipx安裝uv1.3 補充 2. 考慮在離線系統上安裝uv2.1 下載并上傳安裝包2.2 用戶級安裝uv(~/.local/bin/)2.3 補充 3. uv 管理Python解釋器4. uv 管理依賴5. uv運行代碼5.1 uv不在項目下執行腳本5.2 u…

zabbix批量主機維護腳本兼容性更新

最近做新老版本zabbix監控主機遷移發現zabbix6.0后api安全有了效大升級,批量主機維護腳本出現認證兼容性問題,以下為腳本更新token支持:在這里插入代碼片: # /usr/bin/env python3 # -*- coding:utf-8 -*- import requests impor…

Java中static關鍵字深度解析:從入門到高階實戰

Java中static關鍵字深度解析:從入門到高階實戰 目錄 static的本質與核心特性靜態變量 vs 實例變量:底層對比靜態方法的設計哲學與應用場景高級用法:突破常規的static技巧 4.1 靜態代碼塊:類加載的“初始化引擎”4.2 靜態內部類&…

基于RT-Thread的STM32F4開發第五講——軟件模擬I2C

文章目錄 前言一、RT-Thread工程創建二、AT24C02三、函數編寫1.I2C_soft.c2.I2C_soft.h3.main.h 四、效果展示五、資源分享總結 前言 本章是基于RT-Thread studio實現軟件模擬I2C,開發板是正點原子的STM32F4探索者,使用的RT-Thread驅動是5.1.0&#xff0…

49、c# 能?foreach 遍歷訪問的對象需滿足什么條件?

在 C# 中,要使用 foreach 循環遍歷一個對象,該對象必須滿足以下條件之一: 1. 實現 IEnumerable 或 IEnumerable 接口 非泛型版本:System.Collections.IEnumerable public class MyCollection : IEnumerable {private int[] _da…

推客小程序系統開發:全棧式技術解決方案與行業賦能實踐?

? 在數字化營銷深度滲透各行業的當下,傳統推廣模式已難以滿足企業精細化運營與高效獲客的需求。專業的推客小程序系統憑借其強大的裂變傳播能力與靈活的推廣機制,成為企業構建私域流量池、提升推廣效能的核心工具。我們基于多年技術沉淀與行業洞察&…

WPF布局系統詳解:掌握界面設計的核心藝術

掌握界面設計的核心藝術 1. WPF布局系統概述2. Grid布局詳解2.1 基本行列定義2.2 單元格定位與跨行跨列 3. StackPanel布局4. DockPanel布局5. WrapPanel與Canvas5.1 WrapPanel自動換行布局 5. Canvas絕對定位6. 布局嵌套與綜合應用7. 布局性能優化8. 響應式布局技巧9. 實戰&am…

labview實現LED流水燈的第一種方法

目的:寫一個跑馬燈程序,7個燈從左到右不停的輪流點亮,閃爍間隔由滑動條調節。 一、方法1:使用順序結構 使用順序結構,平鋪式順序結構與創建局部變量實現LED流水燈 具體步驟如下: 第一步,選擇…

uniapp如何設置uni.request可變請求ip地址

文章目錄 簡介方法一:直接在請求URL中嵌入變量方法二:使用全局變量方法三:使用環境變量方法四:服務端配置方法五:使用配置文件(如config.js):總結 簡介 在uni-app中,uni.request 用…

深度學習篇---LSTMADF軌跡預測

文章目錄 前言LSTM 軌跡預測原理應用在行人軌跡預測方面在自動駕駛車輛的軌跡預測中優點缺點APF 軌跡預測原理應用在船舶運動規劃在無人駕駛車輛避障軌跡跟蹤優點缺點示例代碼前言 本文簡單介紹LSTM(長短期記憶網絡)和ADF(人工勢場法)這兩種不同的軌跡預測方法。 LSTM 軌跡…

python實現Web請求與響應

目錄 一:什么是Web請求與響應? 1:Web請求 2:Web響應 3:HTTP協議概述 4:常見的HTTP狀態碼包括: 二:python的requests庫 1:安裝requests庫 2:發送GET請…

Unity使用sherpa-onnx實現說話人識別

網友軟綿綿的面包人推薦,模型3dspeaker_speech_eres2net_base_200k_sv_zh-cn_16k-common.onnx的效果比3dspeaker_speech_eres2net_base_sv_zh-cn_3dspeaker_16k.onnx要好 具體代碼 using System; using System.Collections.Generic; using System.IO; using Sherpa…

ElasticSearch-集群

本篇文章依據ElasticSearch權威指南進行實操和記錄 1,空集群 即不包含任何節點的集群 集群大多數分為兩類,主節點和數據節點 主節點 職責:主節點負責管理集群的狀態,例如分配分片、添加和刪除節點、監控節點故障等。它們不直接…

LG P9844 [ICPC 2021 Nanjing R] Paimon Segment Tree Solution

Description 給定序列 a ( a 1 , a 2 , ? , a n ) a(a_1,a_2,\cdots,a_n) a(a1?,a2?,?,an?),有 m m m 次修改 ( l , r , v ) (l,r,v) (l,r,v): 對每個 i ∈ [ l , r ] i\in[l,r] i∈[l,r],令 a i ← a i v a_i\gets a_iv ai?←…

Google Prompt Tuning:文本嵌入優化揭秘

Google Research Prompt Tunin :from_embedded_string 在 Google Research 的 Prompt Tuning 項目代碼庫 中,from_embedded_string 函數主要用于基于字符串文本初始化提示詞的嵌入向量,其調用場景通常與提示詞優化或任務適配相關。 1. 核心代碼位置 from_embedded_string …

網頁 H5 微應用接入釘釘自動登錄

??關于云審批 云審批(cloud approve) ,一款專為小微企業打造,支持多租戶的在線審批神器。它簡化了申請和審批流程,讓您隨時隨地通過手機或電腦完成請款操作。員工一鍵提交申請,審批者即時響應&#xff0c…

idea無法識別Maven項目

把.mvn相關都刪除了 導致Idea無法識別maven項目 或者 添加導入各個模塊 最后把父模塊也要導入

飛槳paddle import fluid報錯【已解決】

跟著飛槳的安裝指南安裝了paddle之后 pip install paddlepaddle有一個驗證: import paddle.fluid as fluid fluid.install check.run check()報錯情況如下,但是我在pip list中,確實看到了paddle安裝上了 我import paddle別的包&#xff0c…

現代化SQLite的構建之旅——解析開源項目Limbo

現代化SQLite的構建之旅——解析開源項目Limbo 在當今飛速發展的技術世界中,輕量級且功能強大的數據庫已成為開發者的得力助手。當我們談論輕量級數據庫時,SQLite無疑是一個舉足輕重的名字。然而,隨著技術的進步,我們對數據庫的需求也變得更加多樣化。這正是Limbo項目誕生…

MinIO:從入門到精通,解鎖云原生存儲的奧秘

一、引言:為什么 MinIO 正在重塑存儲世界? 在云計算和大數據時代,傳統存儲系統面臨擴展性差、成本高、兼容性不足等挑戰。MinIO 憑借其 S3 兼容性、分布式架構、高性能存儲 等特性,成為企業構建現代化存儲基礎設施的首選。 本文…