题目描述

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

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

加法规则如下:

给定整数 depth,对于深度为 depth - 1 的每个非空树节点 cur ,创建两个值为 val 的树节点作为 cur 的左子树根和右子树根。

cur 原来的左子树应该是新的左子树根的左子树。

cur 原来的右子树应该是新的右子树根的右子树。

如果 depth == 1 意味着 depth - 1 根本没有深度,那么创建一个树节点,值 val 作为整个原始树的新根,而原始树就是新根的左子树。

来源:力扣(LeetCode)

链接:https://leetcode.cn/problems/add-one-row-to-tree

题目解析

一道经典的树的遍历题。通常树的遍历题可以用深度优先遍历与广度遍历解决,本题同样适用。对于这样,需要在特定深度进行统一操作的,广度优先可能是更为自然的做法。

代码

BFS
func addOneRow(root *TreeNode, val int, depth int) *TreeNode {
if depth == 1 {
return &TreeNode{val, root, nil}
}
queue := []*TreeNode{root}
// locate the nodes at depth - 1
for i := 1; i < depth-1; i++ {
tempQueue := queue
queue = nil
for _, node := range tempQueue {
if node.Left != nil {
queue = append(queue, node.Left)
}
if node.Right != nil {
queue = append(queue, node.Right)
}
}
}
// create new nodes at depth
for _, node := range queue {
node.Left = &TreeNode{val, node.Left, nil}
node.Right = &TreeNode{val, nil, node.Right}
}
return root
}
DFS
func addOneRow(root *TreeNode, val int, depth int) *TreeNode {
if root == nil {
return root
}
if depth == 1 {
return &TreeNode{val, root, nil}
}
if depth == 2 {
root.Left = &TreeNode{val, root.Left, nil}
root.Right = &TreeNode{val, nil, root.Right}
return root
}
root.Left = addOneRow(root.Left, val, depth-1)
root.Right = addOneRow(root.Right, val, depth-1)
return root
}

[LC623]在二叉树中增加一行的更多相关文章

  1. Leetcode 623.在二叉树中增加一行

    在二叉树中增加一行 给定一个二叉树,根节点为第1层,深度为 1.在其第 d 层追加一行值为 v 的节点. 添加规则:给定一个深度值 d (正整数),针对深度为 d-1 层的每一非空节点 N,为 N 创 ...

  2. Java实现 LeetCode 623 在二叉树中增加一行(遍历树)

    623. 在二叉树中增加一行 给定一个二叉树,根节点为第1层,深度为 1.在其第 d 层追加一行值为 v 的节点. 添加规则:给定一个深度值 d (正整数),针对深度为 d-1 层的每一非空节点 N, ...

  3. [LeetCode] Add One Row to Tree 二叉树中增加一行

    Given the root of a binary tree, then value v and depth d, you need to add a row of nodes with value ...

  4. [LeetCode] 623. Add One Row to Tree 二叉树中增加一行

    Given the root of a binary tree, then value v and depth d, you need to add a row of nodes with value ...

  5. LeetCode——623.在二叉树中增加一行

    给定一个二叉树,根节点为第1层,深度为 1.在其第 d 层追加一行值为 v 的节点. 添加规则:给定一个深度值 d (正整数),针对深度为 d-1 层的每一非空节点 N,为 N 创建两个值为 v 的左 ...

  6. [Swift]LeetCode623. 在二叉树中增加一行 | Add One Row to Tree

    Given the root of a binary tree, then value v and depth d, you need to add a row of nodes with value ...

  7. ASP.net中GridView中增加一行记录并默认显示为编辑状态

    //添加 protected void Button1_Click(object sender, EventArgs e) { DataSet ds = (DataSet)pa.GetDataSet( ...

  8. PHP实现单击“添加”按钮增加一行表单项,并将所有内容插入到数据库中

    PHP实现单击“添加”按钮增加一行表单项,并将所有内容插入到数据库中 效果图: html+jquery: <html> <head> <meta http-equiv=& ...

  9. 在内核中增加对yaffs文件系统的支持

    自己最近在搞一些内核以及根文件系统的移植,就涉及到了需要在内核中增加对yaffs文件系统的支持.在网上找了一些文档后,自己将具体的操作过程做了一个总结,方便以后查询使用: 1.获取yaffs源码 YA ...

  10. 在/proc文件系统中增加一个目录hello,并在这个目录中增加一个文件world,文件的内容为hello world

    一.题目 编写一个内核模块,在/proc文件系统中增加一个目录hello,并在这个目录中增加一个文件world,文件的内容为hello world.内核版本要求2.6.18 二.实验环境 物理主机:w ...

随机推荐

  1. MVC PHP架构 博客论坛实现全过程

    目录 1. MVC的历史 1.1 优点与缺点 1.1.1 优点 1.1.2 缺点 2. 个人博客论坛的MVC实现 2.1 前言 2.2 web代码结构 框架 2.2.1 web应用发展 2.2.2 C ...

  2. esp8266+MQTT+DHT11(温湿度计) platformio

    esp8266 + MQTT + DHT11(温湿度计) 连线 #include <Arduino.h> #include <ESP8266WiFi.h> #include & ...

  3. spool参数详解

    SQL*PLUS维护系统变量,也称SET变量,利用它可为SQL*PLUS交互建立一个特殊的环境,如:设置NUMBER数据的显示宽度;设置每页的行数;设置列的宽度等.可用SET命令改变这些系统变量,也可 ...

  4. 20240719 CVTE 笔试

    岗位:嵌入式软件开发工程师(Linux方向) 题型:20 道不定项选择题,2 道编程题 1.不定项选择题 1.1 如下哪个命令可以帮助你知道 shell 的用法 (D) more help pwd m ...

  5. ExtJS & Asp.NET

    企业应用中,要快速开发Web应用,前端使用ExtJS还行,包含许多常用的控件,图标,配色方案... 帖上部分载图: 完全可订制的登录界面: 可调整的布局: 可综合使用的模态对话框: 树结构及动态加载: ...

  6. 2023NOIP A层联测22 T2 差后队列

    2023NOIP A层联测22 差后队列 挺有意思的期望题,题解做法应该是 DP,但是我又双叒写出奇怪的做法-- 思路 除去最大值外的元素个数的倒数就是这一轮取到某个数的概率,而最大值是特殊的情况,在 ...

  7. 从零开始学机器学习——K-Means 聚类

    首先给大家介绍一个很好用的学习地址:https://cloudstudio.net/columns 在上一章节中,我们重点探讨了聚类的可视化分析方法,帮助我们更好地理解数据之间的关系和结构.今天,我们 ...

  8. 【FAQ】Harmo【FAQ】HarmonyOS SDK 闭源开放能力 — 公共模块

    1.问题描述: 文档哪里能找到所有的权限查看该权限是用户级的还是系统级的. 解决方案: 您好,可以看一下下方链接是否可以解决问题: https://developer.huawei.com/consu ...

  9. ETCD存储满了如何处理?

    一.前言 当运行 ETCD 日志报 Erro: mvcc database space exceeded 时,或者查看健康状态显示 failed to commit proposal: Active ...

  10. Docker:查看当前登录用户和密码

    一.查看 查看所有 docker 服务器登陆的用户和密码. # Linux cat /root/.docker/config.json # Windows C:\Users\Name\.docker\ ...