当前位置:网站首页>【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)
边栏推荐
猜你喜欢
![[Structure internal power practice] Structure memory alignment (1)](/img/31/4ddc16810da8238ac95a93d007e12e.png)
[Structure internal power practice] Structure memory alignment (1)

【Excel实战】--图表联动demo_001

mySQL数据库初始化失败,有谁可以指导一下吗

The Coolest Kubernetes Network Solution Cilium Getting Started Tutorial

Three solutions to solve cross-domain in egg framework

Redis cache and existing problems--cache penetration, cache avalanche, cache breakdown and solutions

DataFrame insert row and column at specified position

Ethernet Principle

Comprehensively explain what is the essential difference between GET and POST requests?Turns out I always misunderstood

全面讲解GET 和 POST请求的本质区别是什么?原来我一直理解错了
随机推荐
CVPR 2022 | 将X光图片用于垃圾分割,港中大(深圳)探索大规模智能垃圾分类
复现一次循环和两次循环
让硬盘更快,让系统更稳定
生命的颜色占卜
Moonbeam团队发布针对整数截断漏洞的紧急安全修复
selectPage 动态改变参数方法
Redis cache and existing problems--cache penetration, cache avalanche, cache breakdown and solutions
How to replace colors in ps, self-study ps software photoshop2022, replace one color of a picture in ps with another color
Code Audit - PHP
画法几何及工程制图考试卷A卷
Comprehensively explain what is the essential difference between GET and POST requests?Turns out I always misunderstood
TensorFlow installation steps
SQL语句查询字段内重复内容,并按重复次数加序号
thinkPHP5 实现点击量(数据自增/自减)
六年团队Leader实战秘诀|程序员最重要的八种软技能 - 脸皮薄容易耽误事 - 自我营销
基因数据平台
XSS靶机通关以及XSS介绍
最 Cool 的 Kubernetes 网络方案 Cilium 入门教程
Insights in programming
动态库之间回调函数使用