当前位置:网站首页>【LeetCode】623. Add a row to the binary tree
【LeetCode】623. Add a row to the binary tree
2022-08-05 08:50:00 【pass night】
题目
给定一个二叉树的根 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, 104]范围内 - 树的深度在
[1, 104]范围内 -100 <= Node.val <= 100-105 <= val <= 1051 <= depth <= the depth of tree + 1
题解1
思路
- 若为根节点,The new node is directly used as the root node,The root node is returned as the left subtree of the new node
- if not the root node,则遍历到 d e p t h − 1 depth-1 depth−1层,Then insert the new node
代码
# 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 addOneRow(self, root: Optional[TreeNode], val: int, depth: int) -> Optional[TreeNode]:
if depth == 1:
node = TreeNode(val)
node.left = root
root = node
return root
queue = collections.deque([root])
while queue and depth > 2:
depth -= 1
for _ in range(len(queue)):
cur = queue.popleft()
if cur.left: queue.append(cur.left)
if cur.right: queue.append(cur.right)
for _ in range(len(queue)):
cur = queue.popleft()
if cur.left:
node = TreeNode(val)
node.left = cur.left
cur.left = node
else:
cur.left = TreeNode(val)
if cur.right:
node = TreeNode(val)
node.right = cur.right
cur.right = node
else:
cur.right = TreeNode(val)
return root
复杂度
- 时间复杂度: O ( n ) O(n) O(n)
- 空间复杂度: O ( n ) O(n) O(n)
题解2
思路
- 当 d e p t h ∈ 1 , 2 depth \in {1,2} depth∈1,2时,直接插入新节点,Otherwise recurse its left and right subtrees,直到符合条件
代码
# 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 addOneRow(self, root: Optional[TreeNode], val: int, depth: int) -> Optional[TreeNode]:
if not root: return None
if depth == 1:
return TreeNode(val,root,None)
if depth == 2:
root.left = TreeNode(val,root.left, None)
root.right = TreeNode(val, None, root.right)
else:
root.left = self.addOneRow(root.left, val, depth-1)
root.right = self.addOneRow(root.right, val, depth-1)
return root
复杂度
- 时间复杂度: O ( n ) O(n) O(n)
- 空间复杂度: O ( n ) O(n) O(n)
边栏推荐
- Data source object management Druid and c3p0
- 【无标题】长期招聘硬件工程师-深圳宝安
- MySQL 数据库 报错 The server quit without updating PID file (/var/lib/mysql/localhost.localdomain.pid)
- Linux导出数据库数据到硬盘
- 爱情是一部忧伤的乐曲
- 苹果官网商店新上架Mophie系列Powerstation Pro、GaN充电头等产品
- 七夕看什么电影好?爬取电影评分并存入csv文件
- 接口全周期的生产力利器Apifox
- 按钮上显示值的轮流切换
- 【LeetCode】623. 在二叉树中增加一行
猜你喜欢

Why is pnpm hitting npm and yarn dimensionality reduction?

Chapter 12 Bayesian Networks

15.1.1、md—md的基础语法,快速的写文本备忘录

php向mysql写入数据失败

TensorFlow installation steps

ps怎么替换颜色,自学ps软件photoshop2022,ps一张图片的一种颜色全部替换成另外一种颜色

嵌入式系统:基本定时器

MySQL 数据库 报错 The server quit without updating PID file (/var/lib/mysql/localhost.localdomain.pid)

【LeetCode】623. 在二叉树中增加一行

XSS靶机通关以及XSS介绍
随机推荐
pnpm 是凭什么对 npm 和 yarn 降维打击的
复现一次循环和两次循环
行走社会100绝招
flink cdc支持从oracle dg库同步吗
Comprehensively explain what is the essential difference between GET and POST requests?Turns out I always misunderstood
Detailed explanation of DNS query principle
施一公:科学需要想象,想象来自阅读
SQL SERVER on master-slave table trigger design
php fails to write data to mysql
Moonbeam团队发布针对整数截断漏洞的紧急安全修复
Ethernet Principle
tear apart loneliness
15.1.1、md—md的基础语法,快速的写文本备忘录
Iptables implementation under the network limited (NTP) synchronization time custom port
漂亮MM和普通MM的区别
七夕看什么电影好?爬取电影评分并存入csv文件
egg framework
控制器-----controller
工程制图直线投影练习
EA谈单机游戏:仍是产品组合中极其重要的部分