友情支持

如果您觉得这个笔记对您有所帮助,看在D瓜哥码这么多字的辛苦上,请友情支持一下,D瓜哥感激不尽,😜

支付宝

微信

有些打赏的朋友希望可以加个好友,欢迎关注D 瓜哥的微信公众号,这样就可以通过公众号的回复直接给我发信息。

wx jikerizhi

公众号的微信号是: jikerizhi因为众所周知的原因,有时图片加载不出来。 如果图片加载不出来可以直接通过搜索微信号来查找我的公众号。

623. 在二叉树中增加一行

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

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

加法规则如下:

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

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

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

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

示例 1:

0623 01
输入: root = [4,2,6,3,1,5], val = 1, depth = 2
输出: [4,1,1,2,null,null,6,3,1,5]

示例 2:

0623 02
输入: 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 <= 105

  • 1 <= depth <= the depth of tree + 1

思路分析

深度优选遍历或广度优先遍历。

  • 一刷

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
/**
 * @author D瓜哥 · https://www.diguage.com
 * @since 2026-04-07 20:24:16
 */
public TreeNode addOneRow(TreeNode root, int val, int depth) {
  if (depth == 1) {
    TreeNode result = new TreeNode(val);
    result.left = root;
    return result;
  }
  dfs(root, val, depth - 1);
  return root;
}

private void dfs(TreeNode root, int val, int depth) {
  if (root == null) {
    return;
  }
  if (depth == 1) {
    TreeNode left = new TreeNode(val);
    left.left = root.left;
    root.left = left;
    TreeNode right = new TreeNode(val);
    right.right = root.right;
    root.right = right;
    return;
  }
  dfs(root.left, val, depth - 1);
  dfs(root.right, val, depth - 1);
}