LeetCode题练习与总结:在二叉树中增加一行--623

server/2025/2/7 5:12:58/

一、题目描述

给定一个二叉的根 root 和两个整数 val 和 depth ,在给定的深度 depth 处添加一个值为 val 的节点行。

注意,根节点 root 位于深度 1 。

加法规则如下:

  • 给定整数 depth,对于深度为 depth - 1 的每个非空节点 cur ,创建两个值为 val 的节点作为 cur 的左子根和右子根。
  • cur 原来的左子应该是新的左子根的左子
  • cur 原来的右子应该是新的右子根的右子
  • 如果 depth == 1 意味着 depth - 1 根本没有深度,那么创建一个节点,值 val 作为整个原始的新根,而原始就是新根的左子

示例 1:

输入: root = [4,2,6,3,1,5], val = 1, depth = 2
输出: [4,1,1,2,null,null,6,3,1,5]

示例 2:

输入: root = [4,2,null,3,1], val = 1, depth = 3
输出:  [4,2,null,1,1,3,null,null,1]

提示:

  • 节点数在 [1, 10^4] 范围内
  • 的深度在 [1, 10^4]范围内
  • -100 <= Node.val <= 100
  • -10^5 <= val <= 10^5
  • 1 <= depth <= the depth of tree + 1

二、解题思路

  1. 如果 depth 为 1,直接创建一个新的节点作为根节点,原根节点作为新根节点的左子

  2. 使用递归方法遍历,记录当前深度。当到达 depth - 1 时,对当前节点的左右子进行操作。

  3. 在每个节点 cur 的左右子上分别添加值为 val 的新节点,并将原左子和右子分别作为新节点的左子和右子

  4. 递归结束条件:当遍历到叶子节点时,无需继续递归。

三、具体代码

class Solution {public TreeNode addOneRow(TreeNode root, int val, int depth) {// 如果depth为1,直接创建新根节点if (depth == 1) {TreeNode newRoot = new TreeNode(val);newRoot.left = root;return newRoot;}// 递归函数,用于在指定深度添加节点addNodes(root, val, depth, 1);return root;}private void addNodes(TreeNode node, int val, int depth, int currentDepth) {// 如果节点为空,直接返回if (node == null) {return;}// 如果当前深度为depth-1,则需要添加新节点if (currentDepth == depth - 1) {TreeNode leftTemp = node.left;TreeNode rightTemp = node.right;// 创建新节点并调整子node.left = new TreeNode(val);node.right = new TreeNode(val);node.left.left = leftTemp;node.right.right = rightTemp;} else {// 继续递归遍历左右子addNodes(node.left, val, depth, currentDepth + 1);addNodes(node.right, val, depth, currentDepth + 1);}}
}

这段代码首先处理了 depth 为 1 的情况,然后定义了一个递归函数 addNodes 来处理其他情况。在递归函数中,当到达 depth - 1 时,会在当前节点的左右子上添加新节点,并将原来的子连接到新节点的相应位置。

四、时间复杂度和空间复杂度

1. 时间复杂度
  • addOneRow 方法中,如果 depth 为 1,则直接创建新根节点,这个操作的时间复杂度是 O(1)。

  • addNodes 方法是一个递归函数,它会遍历中的每个节点。对于每个节点,它会检查当前深度是否为 depth - 1。如果是,则在该节点下添加两个新节点,并将原来的子连接到新节点上,这个操作的时间复杂度是 O(1)。

  • 如果当前深度不是 depth - 1,则递归调用 addNodes 方法遍历左右子。在递归过程中,每个节点都会被访问一次。

  • 假设有 n 个节点,则递归函数 addNodes 会被调用 n 次。因此,总的时间复杂度是 O(n),其中 n 是中节点的数量。

2. 空间复杂度
  • 递归调用 addNodes 方法时,会在调用栈上占用空间。在最坏的情况下,如果是完全不平衡的(例如,退化成一条链),那么递归的深度将是 n,其中 n 是中节点的数量。因此,递归调用栈的空间复杂度是 O(n)。

  • 除了递归调用栈的空间,我们还需要考虑在 depth - 1 深度处添加新节点时使用的额外空间。在最坏的情况下,如果是完全平衡的,那么在 depth - 1 深度处会有最多 2^(depth-1) 个节点。每个节点都需要两个新节点,因此需要 O(2^(depth-1)) 的额外空间。

五、总结知识点

代码中涉及的知识点包括:

  1. 类定义:定义了一个 Solution 类,包含一个公共方法和一个私有方法。

  2. 的遍历:使用了递归方法来遍历二叉

  3. 递归addNodes 方法是一个递归函数,用于在二叉的指定深度添加节点。

  4. 二叉节点:定义了 TreeNode 类型的节点,每个节点包含值 val、左子 left 和右子 right

  5. 条件语句:使用了 if 语句来检查递归的结束条件以及是否达到指定深度。

  6. 赋值操作:在添加新节点时,使用了赋值操作来更新节点的左右子

  7. 递增操作:在递归调用时,使用 currentDepth + 1 来更新当前深度。

以下是具体的知识点总结:

  • 数据结构:理解二叉的结构和二叉节点的定义。
  • 递归算法:理解递归的概念,以及如何使用递归遍历结构。
  • 指针操作:理解如何通过指针操作来修改的结构,如改变节点的左右子
  • 控制流:掌握 if-else 语句的使用,以实现不同的逻辑路径。
  • 方法定义:理解如何定义公共方法和私有方法,以及它们的作用域。
  • 参数传递:理解如何通过参数传递信息,以及如何处理参数的变化(如递增操作)。

以上就是解决这个问题的详细步骤,希望能够为各位提供启发和帮助。


http://www.ppmy.cn/server/165602.html

相关文章

OpenEuler学习笔记(十四):在OpenEuler上搭建.NET运行环境

一、在OpenEuler上搭建.NET运行环境 基于包管理器安装 添加Microsoft软件源&#xff1a;运行命令sudo rpm -Uvh https://packages.microsoft.com/config/centos/8/packages-microsoft-prod.rpm&#xff0c;将Microsoft软件源添加到系统中&#xff0c;以便后续能够从该源安装.…

蓝桥杯例题六

奋斗是一种态度&#xff0c;也是一种生活方式。无论我们面对什么样的困难和挑战&#xff0c;只要心怀梦想&#xff0c;坚持不懈地努力&#xff0c;就一定能够迈向成功的道路。每一次失败都是一次宝贵的经验&#xff0c;每一次挫折都是一次锻炼的机会。在困难面前&#xff0c;我…

每日Attention学习20——Group Shuffle Attention

模块出处 [MICCAI 24] [link] LB-UNet: A Lightweight Boundary-Assisted UNet for Skin Lesion Segmentation 模块名称 Group Shuffle Attention (GSA) 模块作用 轻量特征学习 模块结构 模块特点 使用分组(Group)卷积降低计算量引入External Attention机制更好的学习特征S…

51单片机07 串口通信

串口是一种应用十分广泛的通讯接口&#xff0c;串口成本低、容易使用、通信线路简单&#xff0c;可实现两个设备的互相通信。单片机的串口可以使单片机与单片机、单片机与电脑、单片机与各式各样的模块互相通信。51单片机内部自带UART&#xff08;Universal Asynchronous Recei…

React常见状态管理工具详解

了 解React常见的状态管理工具&#xff0c;需要详细解释。首先&#xff0c;我得回想一下React生态中常用的状态管理方案有哪些。React本身有useState和useContext&#xff0c;然后是第三方库比如Redux、MobX、Recoil、Zustand、Jotai、XState&#xff0c;可能还有Valtio。这些工…

宾馆民宿酒店住宿管理系统+小程序项目需求分析文档

该系统是一款专为现代酒店设计的高效、智能、易用的管理工具,旨在帮助酒店提升运营效率、优化客户体验,提升客户满意度与忠诚度,并促进业务增长。系统采用先进的云计算技术,支持小程序等多平台访问,第三方接口,确保数据安全与稳定。本系统主要针对中小型精品酒店、连锁酒…

Google Chrome-便携增强版[解压即用]

Google Chrome-便携增强版 链接&#xff1a;https://pan.xunlei.com/s/VOI0OyrhUx3biEbFgJyLl-Z8A1?pwdf5qa# a 特点描述 √ 无升级、便携式、绿色免安装&#xff0c;即可以覆盖更新又能解压使用&#xff01; √ 此增强版&#xff0c;支持右键解压使用 √ 加入Chrome增强…

Windows Docker笔记-安装docker

安装环境 操作系统&#xff1a;Windows 11 家庭中文版 docker版本&#xff1a;Docker Desktop version: 4.36.0 (175267) 注意&#xff1a; Docker Desktop 支持以下Windows操作系统&#xff1a; 支持的版本&#xff1a;Windows 10&#xff08;家庭版、专业版、企业版、教育…