力扣.623. 在二叉树中增加一行(链式结构的插入操作)

ops/2025/2/8 10:14:20/

Problem: 623. 在二叉树中增加一行

文章目录

  • 题目描述
  • 思路
  • 复杂度
  • Code

题目描述

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

思路

1.首先要说明,对于数据结构无非两大类结构:顺序结构链式结构,而二叉树实质上就可以等效看作为一个二叉链表,而对于链表插入一个节点的操作是应较为熟练掌握的所以二叉树的插入节点操作其实是相类似的操作,同时由于二叉树的特性,我们无法像遍历单链表那样对于二叉树进行迭代遍历操作,而为了实现在二叉树中插入节点,我们有需要利用递归操作完成,具体到本题
2.对于层数为1时,做特殊处理,直接将待插入的节点作为根节点,原始的二叉树作为其左子树
3.对于一般情况,我们做二叉树的先序遍历当递归到的层数为给定层数减一时进行插入操作即可

复杂度

时间复杂度:

O ( n ) O(n) O(n);其中 n n n为二叉树的节点个数

空间复杂度:

O ( h ) O(h) O(h);其中 h h h为二叉树的高度

Code

/*** 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 {private int targetVal;private int targetDepth;private int curDepth = 0;public TreeNode addOneRow(TreeNode root, int val, int depth) {targetDepth = depth;targetVal = val;// Insert into the first line with special treatmentif (targetDepth == 1) {TreeNode newRoot = new TreeNode(val);newRoot.left = root;return newRoot;}  // Walk through the binary tree and insert the corresponding rowtraverse(root);return root;}private void traverse(TreeNode root) {if (root == null) {return;}curDepth++;if (curDepth == targetDepth - 1) {TreeNode newLeftNode = new TreeNode(targetVal);TreeNode newRightNode = new TreeNode(targetVal);newLeftNode.left = root.left;newRightNode.right = root.right;root.left = newLeftNode;root.right = newRightNode;}traverse(root.left);traverse(root.right);curDepth--;}
}

http://www.ppmy.cn/ops/156698.html

相关文章

【Kubernetes Pod间通信-第2篇】使用BGP实现Pod到Pod的通信

Kubernetes中Pod间的通信 本系列文章共3篇: 【Kubernetes Pod间通信-第1篇】在单个子网中使用underlay网络实现Pod到Pod的通信【Kubernetes Pod间通信-第2篇】使用BGP实现Pod到Pod的通信(本文介绍)【Kubernetes Pod间通信-第3篇】Kubernetes中Pod与ClusterIP服务之间的通信…

网络安全—DDoS攻防

背景简述:DDoS攻击分为很多类型,有消耗网络带宽的流量攻击,有消耗服务器资源的应用层攻击等。影响巨大,且让无论大公司还是小公司都肃然“起敬”的当属:流量攻击。在流量越来越廉价的今天,攻击流量小则几百…

【AI应用】免费的文本转语音工具:微软 Edge TTS 和 开源版 ChatTTS 对比

【AI论文解读】【AI知识点】【AI小项目】【AI战略思考】【AI日记】【读书与思考】【AI应用】 我试用了下Edge TTS,感觉还不错,不过它不支持克隆声音(比如自己的声音) 微软 Edge TTS 和 开源版 ChatTTS 都是免费的 文本转语音&…

链式结构二叉树(递归暴力美学)

文章目录 1. 链式结构二叉树1.1 二叉树创建 2. 前中后序遍历2.1 遍历规则2.2 代码实现图文理解 3. 结点个数以及高度等二叉树结点个数正确做法: 4. 层序遍历5. 判断是否完全二叉树 1. 链式结构二叉树 完成了顺序结构二叉树的代码实现,可以知道其底层结构…

探索 Spring Cloud Alibaba:开启微服务架构新时代

一、引言 在当今数字化浪潮中,软件系统的规模和复杂度不断攀升,传统的单体架构逐渐难以满足快速迭代、高并发处理以及灵活扩展的需求。微服务架构应运而生,它将一个大型的应用拆分成多个小型、自治的服务,每个服务专注于特定的业务…

华为支付-免密支付接入免密代扣说明

免密代扣包括支付并签约以及签约代扣场景。 开发者接入免密支付前需先申请开通签约代扣产品(即申请配置免密代扣模板及协议模板ID)。 华为支付以模板维度管理每一个代扣扣费服务,主要组成要素如下: 接入免密支付需注意&#x…

【算法专场】分治(下)

目录 前言 归并排序 思想 912. 排序数组 算法思路 算法代码 LCR 170. 交易逆序对的总数 算法思路 算法代码 315. 计算右侧小于当前元素的个数 - 力扣(LeetCode) 算法思路 算法代码 493. 翻转对 算法思路 算法代码 好久不见~时隔多日&…

动态词表采样:一种控制模型词表大小的新方法

在自然语言处理(NLP)领域,词汇量的大小直接影响着模型的复杂度和性能。面对超大规模的词表,如何有效地管理和利用这些词汇成为了研究者们关注的重点。本文将探讨一种创新的方法——通过动态采样方式从原始词表中提取有效词汇&…