94二叉树中序遍历解题记录

news2025/4/1 21:44:19

怎么说呢,以为这道题不用记录了,菜得吓到了自己。起因是这个遍历的递归一般是写两个函数完成,如下:

func inorder(root *TreeNode, res *[]int) {
    if root == nil {
        return
    }
    inorder(root.Left, res)
    *res = append(*res, root.Val) // 注意一下切片指针
    inorder(root.Right, res)
}

func inorderTraversal(root *TreeNode) []int {
    var res []int
    inorder(root, &res)
    return res
}

然后我就想为啥不全局的res,直接一个函数搞定呢:

var res []int
func inorderTraversal(root *TreeNode) []int {
    if root == nil {
        return res
    }
    inorderTraversal(root.Left)
    res = append(res, root.Val)
    inorderTraversal(root.Right)
    return res
}

当然是错的,因为res在整个程序运行过程中都存在且共享的,每次遍历不同的树之前按理说都应该res = []int{} // 每次调用时重新初始化 res
在这里插入图片描述
从测试结果来看,在力扣的测试环境中,全局变量的生命周期是整个测试用例的执行过程。也就是说,全局变量在整个测试过程中只会初始化一次,而不会在每个测试用例之间重新初始化。别用!

如果我就要一个函数搞定呢?闭包(其实在这里就是写个内部函数)闭包Closure是指一个函数(或方法)捕获并持有其外部作用域的变量,即使外部函数已经执行完毕,闭包仍然可以访问和修改这些变量。

func inorderTraversal(root *TreeNode) []int {
    var res []int
    var inorder func(node *TreeNode)
    
    // 定义一个闭包(内部函数)
    inorder = func(node *TreeNode) {
        if node == nil {
            return
        }
        inorder(node.Left)
        res = append(res, node.Val) // 访问并修改外部变量 res
        inorder(node.Right)
    }

    inorder(root)
    return res
}

在 Go 中,闭包通常用于:
函数嵌套(在函数内部定义另一个函数)
访问外部变量(内部函数可以修改外部函数的变量)

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

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

相关文章

java项目之基于ssm的亚盛汽车配件销售业绩管理系统(源码+文档)

项目简介 亚盛汽车配件销售业绩管理系统实现了以下功能: 亚盛汽车配件销售业绩管理系统根据调研,确定管理员管理客户,供应商,员工,管理配件和配件的进货以及出售信息。员工只能管理配件和配件的出售以及进货信息&…

Spring Initializr搭建spring boot项目

介绍 Spring Initializr 是一个用于快速生成 Spring Boot 项目结构的工具。它为开发者提供了一种便捷的方式,可以从预先定义的模板中创建一个新的 Spring Boot 应用程序,从而节省了从头开始设置项目的大量时间。 使用 Spring Initializr,你…

第十二章:补充介绍pip与配置及Python结构层次

一、pip介绍pip介绍与配置及Python结构层次 1. pip是什么 pip 是 Python 的一个包管理工具,它允许你安装和管理 Python 库和依赖项。简单来说,pip 就是一个工具,它可以帮助你轻松地安装、更新、卸载 Python 的各种库。 2. pip属于什么层次的…

kotlin,jetpack compose 最简导航(navigation)案例学习

// 添加导航组件依赖,用于支持Compose中的导航功能 implementation ("androidx.navigation:navigation-compose:2.8.9") // 定义包名 package com.example.mynavigation// 导入所需的Android和Compose库 import android.os.Bundle import androidx.activ…

centos 7 LVM管理命令

物理卷(PV)管理命令 pvcreate:用于将物理磁盘分区或整个磁盘创建为物理卷。 示例:sudo pvcreate /dev/sdb1 解释:将 /dev/sdb1 分区创建为物理卷。 pvdisplay:显示物理卷的详细信息,如大小、所属…

鸿蒙前后端项目源码-点餐v3.0-原创!原创!原创!

鸿蒙前后端点餐项目源码含文档ArkTS语言. 原创作品.我半个月写的原创作品,请尊重原创。 原创作品,盗版必究!!!! 原创作品,盗版必究!!!! 原创作…

Unity打包崩溃SRP-URP-管线的问题:Shader::SRPBatcherInfoSetup()

URP build always crash when Use SPR Batcher is ON by default - Bug Reports - Niantic SDK for Unity Community 有点类似这个情况,暂时没有解决方法 *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** Build fingerprint: google/bluejay/blu…

不落因果与不昧因果

在佛教浩瀚的哲学体系中,“因果”是贯穿修行始终的核心命题。而“不落因果”与“不昧因果”这对看似矛盾的概念,恰似明镜的两面,映照出修行者对因果法则的不同认知层次。二者虽仅一字之差,却如天堑般分隔了迷悟两岸,其…

<tauri><rust><GUI>基于rust和tauri,实现一个大寰电爪PGHL(串口设备)定制化控制程序

前言 本文是基于rust和tauri,由于tauri是前、后端结合的GUI框架,既可以直接生成包含前端代码的文件,也可以在已有的前端项目上集成tauri框架,将前端页面化为桌面GUI。 环境配置 系统:windows 10平台:visual studio code语言:rust、javascript库:tauri2.0概述 本文是…

浅谈工商企业用电管理的分布式储能设计

摘要:文章设计了一种新的用于工商业用电管理的分布式储能系统。由于储能系统硬件置换成本高,选择在传统储能系统的硬件框架基础上,对控制软件进行优化设计,建立分布式储能系统模型,分析发电量、储电量及损失电量三者之…

项目代码第10讲【数据库运维知识——如何优化数据库查询效率?】:各种日志查看;主从复制;分库分表(MyCat);读写分离;区别数据分区、分表、分库

01. 运维-课程介绍_哔哩哔哩_bilibili 一、各种日志查看 二、主从复制 三、分库分表(MyCat) 四、读写分离 五、区别数据分区、分表、分库 1、数据库分区 上图中的ibd文件,是分区表的数据文件,可以分布在不同的物理设备上&…

H5DS编辑器教程——H5页面触发动画实战指南

在 H5 页面设计中,触发动画通过动态交互提升用户体验,成为吸引注意力的关键手段。H5DS 编辑器作为一款高效的可视化工具,提供了丰富的动画制作功能,即使是零基础用户也能轻松实现专业级效果。 使用工具:H5DS编辑器 触…

小程序语音识别功能 wx.createInnerAudioContext

页面样式htmlcss <view class"recorder_content"><view class"result_content"><view class"r_title">语音识别结果显示:</view><view class"r_h_input"><text wx:if"{{resultDetails.result}…

Web网页内嵌福昕OFD版式办公套件实现在线预览编辑PDF、OFD文档

PDF&#xff0c;即Portable Document Format&#xff0c;用于以一种独立于应用程序、硬件、操作系统的方式共享和查看文档&#xff1b;OFD&#xff0c;即Office Open Document Format for Document&#xff0c;是一种在政府公文和法律文件等领域广泛应用的电子文件格式&#xf…

ADZS-ICE-2000和AD-ICE2000仿真器在线升级固件

作者的话 近期发现有些兄弟的ICE-2000仿真器链接DSP报错&#xff0c;然后test第四步不通过&#xff0c;我就拿我的仿真器也试了一下&#xff0c;发现ADI悄咪咪的在线升级仿真器固件&#xff0c;有些兄弟不会操作&#xff0c;就会导致仿真器升级失败&#xff0c;连不上目标板&a…

第十一章:Python PIL库-图像处理

一、PIL库简介 PIL&#xff08;Python Imaging Library&#xff09;是一个功能强大的图像处理库&#xff0c;它提供了丰富的图像处理功能&#xff0c;包括图像的打开、处理和保存等操作。PIL支持多种图像文件格式&#xff0c;如JPEG、PNG、BMP等&#xff0c;并且可以完成对图像…

python项目整体文件和依赖打包

python项目整体文件和依赖打包 python项目整体文件和依赖打包 python项目整体文件和依赖打包 准备工作&#xff1a;扫描项目中必要的依赖包 pip install pipreqs pipreqs . 会有一些警告包&#xff0c;需要pip list进行版本修正,这里是三个包第一步&#xff1a;在虚拟环境中安…

logstash收集数据

防止ES的的I/O的压力过大&#xff0c;使用redis/kafka进行缓冲。 对redis的要求 Redis input plugin | Logstash Reference [8.17] | Elastic 一般企业要求的架构 我实现的架构 filebeat把数据传给logstash 配置好filebeat把收集到的数据输入到redis 然后执行命令&#xff0…

智能运维时代的网络拓扑管理:乐维监控的架构可视化实践

在数字化转型的浪潮中&#xff0c;企业IT基础设施正经历着前所未有的复杂化进程。当数以千计的网络设备、服务器、存储系统构成庞大网络体系时&#xff0c;如何实现全局可视化管理已成为企业数字化转型的关键命题。乐维监控网络拓扑系统作为新一代智能运维平台的核心组件&#…

CentOS 7 安装 EMQX (MQTT)

CentOS 7 安装 EMQX 通过 Yum 源安装 EMQX 支持通过 Yum 源安装&#xff0c;您可通过以下 Yum 命令从中自动下载和安装 EMQX。 通过以下命令配置 EMQX Yum 源&#xff1a; curl -s https://assets.emqx.com/scripts/install-emqx-rpm.sh | sudo bash安装以下依赖项&#xff…