LeetCode //C - 114. Flatten Binary Tree to Linked List
114. Flatten Binary Tree to Linked List
Given the root of a binary tree, flatten the tree into a “linked list”:
- The “linked list” should use the same TreeNode class where the right child pointer points to the next node in the list and the left child pointer is always null.
- The “linked list” should be in the same order as a pre-order traversal of the binary tree.
Example 1:
Input: root = [1,2,5,3,4,null,6]
Output: [1,null,2,null,3,null,4,null,5,null,6]
Example 2:
Input: root = []
Output: []
Example 3:
Input: root = [0]
Output: [0]
Constraints:
- The number of nodes in the tree is in the range [0, 2000].
- -100 <= Node.val <= 100
From: LeetCode
Link: 114. Flatten Binary Tree to Linked List
Solution:
Ideas:
-
Modified Pre-Order Traversal: Traditional pre-order traversal visits a node in the order: root, left subtree, and then right subtree. The modification here is that we’re doing it in a slightly different order: we first flatten the right subtree, then the left subtree, and finally process the current root.
-
Global prev Variable: This variable keeps track of the last node that we’ve visited. When we visit a new node, we’ll be linking this node to the prev node using the right pointer.
-
Flattening Process:
- When we visit a node:
- We recursively flatten its right subtree.
- We recursively flatten its left subtree.
- We then update the current node’s right pointer to point to the prev node. This effectively appends the previously processed list to the current node.
- We set the current node’s left pointer to NULL (because we want the linked list to use the right pointers).
- Finally, we update the prev node to be the current node, as this node will be the previous node for the next node we process.
-
Resetting the prev Variable: Before starting the flattening process for a tree (or a subtree), we reset the prev variable to NULL. This ensures that the last node in the flattened list will correctly point to NULL instead of some node from a previous test case or a previous run.
-
Auxiliary Recursive Function: We’ve split the logic into two functions:
- flatten_recursive handles the actual recursive flattening logic.
- flatten is the main function that resets the prev variable and then calls the recursive function to perform the flattening.
Code:
/*** Definition for a binary tree node.* struct TreeNode {* int val;* struct TreeNode *left;* struct TreeNode *right;* };*/
struct TreeNode* prev = NULL;void flatten_recursive(struct TreeNode* root) {if (!root) return;flatten_recursive(root->right);flatten_recursive(root->left);root->right = prev;root->left = NULL;prev = root;
}void flatten(struct TreeNode* root) {prev = NULL; // Reset the prev variableflatten_recursive(root);
}
相关文章:

LeetCode //C - 114. Flatten Binary Tree to Linked List
114. Flatten Binary Tree to Linked List Given the root of a binary tree, flatten the tree into a “linked list”: The “linked list” should use the same TreeNode class where the right child pointer points to the next node in the list and the left child …...

利用transform和border 创造简易图标,以适应uniapp中多字体大小情况下的符号问题
heml: <text class"icon-check"></text> css: .icon-check {border: 2px solid black;border-left: 0;border-top: 0;height: 12px;width: 6px;transform-origin: center;transform: rotate(45deg);} 实际上就是声明一个带边框的div 将其中相邻的两边去…...
C/C++指针函数与函数指针
一、指针函数 指针函数:本质为一个函数,返回值为指针指针函数:如果一个函数的返回值是指针类型,则称为指针函数用指针作为函数的返回值的好处:可以从被调函数向主函数返回大量的数据,常用于返回结构体指针。…...

30天入门Python(基础篇)——第1天:为什么选择Python
文章目录 专栏导读作者有话说为什么学习Python原因1(总体得说)原因2(就业说) Python的由来(来自百度百科)Python的版本 专栏导读 🔥🔥本文已收录于《30天学习Python从入门到精通》 🉑🉑本专栏专门针对于零基础和需要重新复习巩固…...

智慧公厕破解公共厕所管理的“孤岛现象”
在现代社会中,公共厕所是城市管理中的一项重要任务。然而,经常会出现公厕管理的“孤岛现象”,即每个公厕都是独立运作,缺乏统一的管理和监控机制。针对这一问题,智慧公厕的出现为解决公共厕所管理难题带来了新的方案。…...

excel中删除重复项
数据如图: 要删除姓名这一列的重复项,操作: (1)选中姓名这一列(2)点击“数据”(3)点击“删除重复项" 这是excel会自动检测出还有别的关联列 直接默认,点击删除重复项...弹出下面的界面 因为我们只要删除“姓名”列的重复值&…...

2023-9-8 求组合数(三)
题目链接:求组合数 III #include <iostream> #include <algorithm>using namespace std;typedef long long LL;int p;int qmi(int a, int k) {int res 1;while(k){if(k & 1) res (LL) res * a % p;k >> 1;a (LL) a * a % p;}return res; }…...
01 - Apache Seatunnel 源码调试
1.下载源码 https://github.com/apache/seatunnel.git2.编译 mvn clean package -pl seatunnel-dist -am -Dmaven.test.skiptrue3. 下载驱动 sh bin/install-plugin.sh 4.测试类 选择 seatunnel-examples ├── seatunnel-engine-examples ├── seatunnel-flink-connecto…...
UVA-12325 宝箱 题解答案代码 算法竞赛入门经典第二版
GitHub - jzplp/aoapc-UVA-Answer: 算法竞赛入门经典 例题和习题答案 刘汝佳 第二版 根据书上的方法来做,是比较简单的题目。关键在于知道等体积时的枚举法。不过数据大小可能很大,虽然输入可以用int处理,但是 体积*价值 后,需要l…...

烟感报警器单片机方案开发,解决方案
烟感报警器也叫做烟雾报警器。烟感报警器适用于火灾发生时有大量烟雾,而正常情况下无烟的场所。例如写字楼、医院、学校、博物馆等场所。烟感报警器一般安装于所需要保护或探测区域的天花板上,因火灾中烟雾比空气轻,更容易向上飘散࿰…...

【JavaEE】_CSS引入方式与选择器
目录 1. 基本语法格式 2. 引入方式 2.1 内部样式 2.2 内联样式 2.3 外部样式 3. 基础选择器 3.1 标签选择器 3.2 类选择器 3.3 ID选择器 4. 复合选择器 4.1 后代选择器 4.2 子选择器 4.3 并集选择器 4.4 伪类选择器 1. 基本语法格式 选择器若干属性声明 2. 引入…...
【8】shader写入类中
上一篇将 vao vbo写入类中进行封装,本篇将shader进行封装。 Shader shader("res/shaders/Basic.shader");shader.Bind(); shader.SetUniform4f("u_Color", 0.2f, 0.3f, 0.8f, 1.0f);shader.h #pragma once#include <string> #include &l…...
Servlet注册迭代史
Servlet注册迭代史 1、第一代,xml注册 <web-app><display-name>Archetype Created Web Application</display-name><!-- 定义一个Servlet --><servlet><!-- Servlet的名称,用于在配置中引用 --><servlet-name&…...

合创汽车V09纵享商务丝滑?预售价32万元起,正式宣布大规模生产
合创汽车正式宣布,旗下新款车型V09已于9月10日开始大规模生产,并预计将于10月13日正式上市。V09作为中大型纯电动MPV的代表之一,备受瞩目。该车型是广汽新能源和蔚来汽车共同成立的广汽蔚来改为广汽集团和珠江投管共同投资的高端品牌——合创…...
49. 视频热度问题
文章目录 实现一题目来源 谨以此笔记献给浪费掉的两个小时。 此题存在多处疑点和表达错误的地方,如果你看到了这篇文章,劝你跳过该题。 该题对提升HSQL编写能力以及思维逻辑能力毫无帮助。 实现一 with info as (-- 将数据与 video_info 关联&#x…...
【力扣练习题】加一
package sim;import java.math.BigDecimal; import java.util.Arrays;public class Add1 {/*给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。你可以假设除了整数 0 …...

Linux--I/O复用之select
目录 一:概念 二:使用 三:参数介绍: 1.ndfs: 2.fd_set类型: 3.readfds: 4.writefds: 5.exceptfds: 6.timeout: 7.返回值: 四࿱…...

数据结构大作业 成绩分析c语言程序设计
界面加载 界面展示 成绩输入 求平均成绩 升序排列 降序排列 名字排序 按名字搜索 按ID搜索 每门课成绩分析 成绩单展示 -...

Consul学习笔记之-初识Consul
文章目录 1. What is consul?2. Consul能干什么3. Consul的架构3.1 概念 4. Consul VS Eureka4.1 CAP4.2 对比 1. What is consul? 根据官方文档的定义: HashiCorp Consul is a service networking solution that enables teams to manage secure network connec…...

python实现读取并显示图片的两种方法
前言 嗨喽,大家好呀~这里是爱看美女的茜茜呐 在 python 中除了用 opencv,也可以用 matplotlib 和 PIL 这两个库操作图片。 本人偏爱 matpoltlib,因为它的语法更像 matlab。 👇 👇 👇 更多精彩机密、教程&…...

Unity3D中Gfx.WaitForPresent优化方案
前言 在Unity中,Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染(即CPU被阻塞),这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案: 对惹,这里有一个游戏开发交流小组&…...

【WiFi帧结构】
文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成:MAC头部frame bodyFCS,其中MAC是固定格式的,frame body是可变长度。 MAC头部有frame control,duration,address1,address2,addre…...

UE5 学习系列(三)创建和移动物体
这篇博客是该系列的第三篇,是在之前两篇博客的基础上展开,主要介绍如何在操作界面中创建和拖动物体,这篇博客跟随的视频链接如下: B 站视频:s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...

转转集团旗下首家二手多品类循环仓店“超级转转”开业
6月9日,国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解,“超级…...
postgresql|数据库|只读用户的创建和删除(备忘)
CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...

苍穹外卖--缓存菜品
1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得,如果用户端访问量比较大,数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据,减少数据库查询操作。 缓存逻辑分析: ①每个分类下的菜品保持一份缓存数据…...

中医有效性探讨
文章目录 西医是如何发展到以生物化学为药理基础的现代医学?传统医学奠基期(远古 - 17 世纪)近代医学转型期(17 世纪 - 19 世纪末)现代医学成熟期(20世纪至今) 中医的源远流长和一脉相承远古至…...
#Uniapp篇:chrome调试unapp适配
chrome调试设备----使用Android模拟机开发调试移动端页面 Chrome://inspect/#devices MuMu模拟器Edge浏览器:Android原生APP嵌入的H5页面元素定位 chrome://inspect/#devices uniapp单位适配 根路径下 postcss.config.js 需要装这些插件 “postcss”: “^8.5.…...
python爬虫——气象数据爬取
一、导入库与全局配置 python 运行 import json import datetime import time import requests from sqlalchemy import create_engine import csv import pandas as pd作用: 引入数据解析、网络请求、时间处理、数据库操作等所需库。requests:发送 …...

DBLP数据库是什么?
DBLP(Digital Bibliography & Library Project)Computer Science Bibliography是全球著名的计算机科学出版物的开放书目数据库。DBLP所收录的期刊和会议论文质量较高,数据库文献更新速度很快,很好地反映了国际计算机科学学术研…...