当前位置:网站首页>【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)
边栏推荐
猜你喜欢

sql server收缩日志的作业和记录,失败就是因为和备份冲突了吗?

网页直接访问链接不让安全中心拦截

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

DNS 查询原理详解

MySQL database error The server quit without updating PID file (/var/lib/mysql/localhost.localdomain.pid)

复现一次循环和两次循环

DTcloud 装饰器

宝塔实测-搭建中小型民宿酒店管理源码

Three solutions to solve cross-domain in egg framework

施一公:科学需要想象,想象来自阅读
随机推荐
学习笔记14--机器学习在局部路径规划中的应用
Redis implements distributed lock-principle-detailed explanation of the problem
CROS和JSONP配置
8.4 Summary of the mock competition
ts/js function pass parameter with function writing
DTcloud 装饰器
软件系统测试和验收测试有什么联系与区别?专业软件测试方案推荐
Three solutions to solve cross-domain in egg framework
吴恩达深度学习deeplearning.ai——第一门课:神经网络与深度学习——第二节:神经网络基础(下)
Thinking after writing a code with a very high CPU usage
ps怎么把图片变清晰,自学ps软件photoshop2022,简单快速用ps让照片更清晰更有质感
JS语法使用
The toss of MM before going to the street (interesting)
最 Cool 的 Kubernetes 网络方案 Cilium 入门教程
Version number naming convention
Fiddler工具讲解
flink cdc支持从oracle dg库同步吗
使用 External Secrets Operator 安全管理 Kubernetes Secrets
Pagoda measurement - building small and medium-sized homestay hotel management source code
512-color chromatogram