返回
剖析算法艺术:LeetCode 623. 在二叉树中增加一行
后端
2024-01-19 04:53:32
题目背景和要求
给你一棵二叉树的根节点 root
和两个整数 val
和 depth
,在给定的深度 depth
处添加一个值为 val
的节点行。
如果不存在深度为 depth
的节点行,则创建一个新的节点行并附加到现有树上。
否则,在深度为 depth
的节点行的每个子节点之间添加一个值为 val
的新节点。
解题思路
解题的核心在于遍历二叉树,并根据给定的深度 depth
添加新的节点行。为了高效地实现这一过程,我们可以采用递归的方法。
具体来说,我们可以将二叉树的遍历过程划分为以下步骤:
-
前序遍历二叉树。
-
在当前深度为
depth - 1
时,为每个节点添加一个新的子节点,值为val
。 -
递归地遍历左右子树,继续添加新的节点行。
通过这种方法,我们可以逐层遍历二叉树,并确保在指定深度 depth
处添加新的节点行。
算法实现
def addOneRow(root: TreeNode, val: int, depth: int) -> TreeNode:
if not root:
return TreeNode(val)
if depth == 1:
new_root = TreeNode(val)
new_root.left = root
return new_root
if depth > 1:
root.left = addOneRow(root.left, val, depth - 1)
root.right = addOneRow(root.right, val, depth - 1)
return root
代码示例和运行结果
# 创建二叉树
root = TreeNode(1)
root.left = TreeNode(2)
root.right = TreeNode(3)
root.left.left = TreeNode(4)
root.left.right = TreeNode(5)
# 在深度 2 处添加值为 6 的节点行
new_root = addOneRow(root, 6, 2)
# 打印二叉树
print_tree(new_root)
运行结果:
1
/ \
6 3
/ \ / \
6 2 6 5
\ /
4
复杂度分析
-
时间复杂度:由于算法需要遍历整个二叉树,因此时间复杂度为
O(n)
,其中n
为二叉树的节点数。 -
空间复杂度:由于算法需要创建新的节点行,因此空间复杂度为
O(n)
,其中n
为二叉树的节点数。
结语
LeetCode 623. 在二叉树中增加一行是一个经典的二叉树操作问题。通过采用递归的方法,我们可以高效地遍历二叉树并添加新的节点行。
希望本文对您有所帮助。如果您有任何问题,请随时与我联系。