114. 二叉树展开为链表 Python

news2024/11/21 1:47:17

文章目录

  • 一、题目描述
      • 示例 1
      • 示例 2
      • 示例 3
  • 二、代码
  • 三、解题思路


一、题目描述

给你二叉树的根结点 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]

提示:
树中结点数在范围 [0, 2000] 内
-100 <= Node.val <= 100

二、代码

代码如下:

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def flatten(self, root: Optional[TreeNode]) -> None:
        """
        Do not return anything, modify root in-place instead.
        """
        def preoder(root,path):
            path.append(root.val)
            if root.left:
                preoder(root.left,path)
            if root.right:
                preoder(root.right,path)
        preorder_path = []
        def ConstructBT(root):
            if preorder_path:
                if root.right:
                    root.right.val = preorder_path.pop(0)
                else:
                    root.right = TreeNode(preorder_path.pop(0))
                if root.left:
                    root.left = None
                ConstructBT(root.right)
        if root:
            preoder(root,preorder_path)
            print(preorder_path)
            root.val = preorder_path.pop(0)
            ConstructBT(root)
            print(root)


三、解题思路

本题基于二叉树的先序遍历,将遍历结果按顺序重新构造一个“单链表”,实际上是一个没有左子树的二叉树。
本题直接在原本的root上进行修改,解题思路如下:
①遍历二叉树找到其先序遍历序列preorder_path,其中preorder_path中每个值为二叉树结点的值。
②重新构造二叉树;使用ConstructBT(root)方法依次修改已知二叉树root的每一个节点,具体操作有3步:1)当前节点原本就存在其右子树,则直接修改右子树的值;2)如果当前节点不存在右子树,则为其添加一个新的右子树节点;3)如果当前节点存在左子树,则令左子树为空。
将先序遍历序列preorder_path中的值都添加或修改进二叉树root后,返回当前root即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/418491.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于jsp的公交查询系统源码数据库论文

目录 摘 要 1 Abstract 1 1 绪论 1 1.1 选题背景 1 1.2 国内外发展状况 1 1.3 选题的目的 1 1.4 研究手段及意义 1 2相关技术简介 3 2.1Jsp技术介绍 3 2.2 MyEclipse简介 4 2.3 数据库技术 4 2.3.1 数据库的体系结构 4 2.3.2 数据库管理系统&#xff08;D…

(十七)排序算法-基数排序

1 基本介绍 1.1 概述 &#xff08;1&#xff09;基数排序&#xff08;radix sort&#xff09;属于“分配式排序”&#xff0c;顾名思义&#xff0c;它是通过键值的各个位的值&#xff0c;将要排序的元素分配至某些“桶”中&#xff0c;达到排序的作用。 &#xff08;2&#x…

Denoising Diffusion Probabilistic Model,DDPM阅读笔记——(一)

Denoising Diffusion Probabilistic Model一、写在前面二、相关数学知识简介二、生成模型简介&#xff1a;三、变分自编码器概述&#xff08;VAE&#xff09;一、写在前面 人工智能生成内容&#xff08;AI Generated Content&#xff0c;AIGC&#xff09;近年来成为了非常前沿…

2023最新面试题-Java-2

基础语法 1. Java有哪些数据类型 定义&#xff1a;Java语言是强类型语言&#xff0c;对于每一种数据都定义了明确的具体的数据类型&#xff0c;在内存中分配了不同 大小的内存空间。 细化的数据类型就是占用空间的基本元素。分类&#xff1a;基本数据类型 数值型 整数类型…

MySQL-事务处理

MySQL事务 什么是事务 数据中的事务是指数据库执行的一些操作&#xff0c;这些操作最终要么全部执行成功&#xff0c;要么全部失败&#xff0c;不会存在部分成功&#xff0c;部分失败的情况 如果在事务的支持下&#xff0c;最终有两种结果&#xff1a; 操作成功&#xff1a;…

推荐一款 AI 脑图软件,助你神速提高知识体系搭建

觅得一款神器&#xff0c;接近我理想中&#xff0c;搭建知识体系的方法&#xff0c;先来看视频作为数据库开发或管理者&#xff0c;知识体系搭建尤为重要。来看看近些年缺乏足够数据库知识面造成的危害&#xff1a;a/ 数据安全风险&#xff1a;例如&#xff0c;2017年Equifax数…

Dubbo之认识RPC架构

文章目录一、互联网架构演变1.1 RPC架构1.2 SOA架构1.3 微服务架构1.4 SOA vs 微服务二、RPC 基本概念2.1 RPC 协议2.2 RPC 框架2.3 RPC 运行流程2.4 RPC vs HTTP提示&#xff1a;以下是本篇文章正文内容&#xff0c;Dubbo 系列学习将会持续更新 官方文档&#xff1a;https://c…

电池连接接触电阻的优化研究

金属与金属接触处的接触电阻主要受以下因素影响&#xff1a; 表面结构机械负载 表面结构可以通过表面平整度、表面氧化和吸水性进一步描述。 电池组中的这些接头将采用焊接或螺栓连接方式。最初最容易想到的是螺栓母线接头。 螺栓扭矩可用于估算力&#xff0c;从而估算接触压…

mvc的编辑和删除

之前实现了mvs的翻页登录显示等等一系列操作&#xff0c;现在我们再照葫芦画瓢实现一下编辑和删除。 1、编辑 我的思路是首先在list页面要给出编辑的超链接按钮&#xff0c;点击后跳转到一个jsp页面用来输入编辑的相关内容&#xff0c;再提交到负责编辑功能的servlet中。 首…

双硬盘安装Ubuntu22

1、下载Ubuntu系统的iso文件 官方下载地址&#xff1a;Download Ubuntu Desktop | Download | Ubuntu 阿里云镜像下载地址&#xff1a;ubuntu-releases安装包下载_开源镜像站-阿里云 2、制作U盘引导盘 下载软件 Rufus&#xff1a;https://rufus.akeo.ie 绿色免安装&#xff0…

Spring Security源码剖析从入门到精通.跟学尚硅谷(二)

Spring Security源码剖析从入门到精通.跟学尚硅谷 二4. SpringSecurity 微服务权限方案4.1 什么是微服务1、微服务由来2、微服务优势3、微服务本质4.2 微服务认证与授权实现思路1、认证授权过程分析2、权限管理数据模型3、项目技术说明4、搭建工程(1).创建父工程(2).创建子模块…

2023年天猫青团销售数据:口味更个性化,但老字号品牌依然称霸

青团本是清明时节祭祀的产物&#xff0c;但随着时节的推移&#xff0c;青团已经突破了地域与时间的限制&#xff0c;如今的青团已经成为地域性特色小吃的一种&#xff0c;并逐渐被全国消费者所接受。 随着消费回暖及内容营销的助力&#xff0c;今年的青团季比往年相比提高了不少…

天气预报查询 API + AI 等于王炸(一大波你未曾设想的天气预报查询 API 应用场景更新了)

前言 近年来&#xff0c;随着信息化进程的不断深入&#xff0c;人们对于信息的获取和处理需求越来越高。而其中&#xff0c;天气查询API是一个非常重要的服务&#xff0c;它能够帮助人们快速获取所在位置的天气情况&#xff0c;同时也为各类应用提供了必要的气象数据支持。 本…

Vue组件化编程

模块与组件、模块化与组件化 传统方式编写应用 使用组件方式编写应用 模块 理解&#xff1a;向外提供特定功能的 js 程序&#xff0c;一般就是一个 js 文件为什么&#xff1a;js 文件很多很复杂作用&#xff1a;复用 js&#xff0c;简化 js 的编写&#xff0c;提高 js 运行效…

RabbitMQ( 发布订阅模式 ==> TopicExchange)

本章目录&#xff1a; 何为TopicExchangeTopicExchange的具体使用一、何为TopicExchange 老样子&#xff0c;先看官方文档 在DirectExchange中&#xff0c;我们可以发送携带routingkey的消息到交换机中&#xff0c;交换机通过routingkey再去匹配一个或多个符合条件的队列。 …

不要告诉同事你要离职!打算跳槽,新公司开出两倍薪资,私下告诉要好的同事,却被同事出卖给领导!...

职场上有真正的朋友吗&#xff1f;来看看这位网友的讲述&#xff1a;一位前同事本来打算跳槽&#xff0c;新公司开出的薪资是原来的两倍。她私下告诉了几位同事自己打算离职的消息&#xff0c;并跟同事们分享了工资翻倍的喜悦。可她万万没想到&#xff0c;两天之后的公司会议上…

VSCode 配置arduino 开发

下载扩展&#xff0c;Arduino 其次&#xff0c;找到ta&#xff0c;看图片设置 配置完上述两个步骤后VS Code底部出现一个菜单栏&#xff0c;如下&#xff1b; 首先的有一个电灯的项目&#xff0c;我们可以去Arduino IDE 的示例中 另存一份出来 &#xff0c;通过VSCode打开&am…

mysql 主从同步案例集合

记一次 MySQL 主从同步异常的排查记录&#xff0c;百转千回&#xff01; relay log 损坏了&#xff0c;导致从库的 SQL 线程解析 relay log 时出现异常。从库恢复方式是通过手动设置当时出错的 GTID 的下一个值&#xff0c;让从库不从主库同步这个 GTID&#xff0c;最后从库就能…

Hadoop集群启动后,在web:50070端口只有两个datanode节点

spark集群部署规划&#xff1a; hadoop1 master worker datanode namenode secondarynamenode(hadoop) resourcemanager nodemanager(yarn) hadoop2 worker datanode nodemanager hadoop3 worker datanode nodemanager 问题引出&#xff1a;​​​​​​Hadoop集群启…

Java对象模型

介绍 Java是一种面向对象的语言&#xff0c;而Java对象在JVM中存储是由一定结构的。而这个 Java对象自身的存储模型称之为Java对象模型HotSpot虚拟机中&#xff0c;设计了一个OOP-Klass Model.OOP指的是普通对象指针&#xff0c;而Klass用来描述对象的具体类型。如下图所示是一…