刷完LeetCode题库——623. 在二叉树中增加一行

169 阅读3分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第10天,点击查看活动详情

题目详情

LeetCode题库序号 623. 在二叉树中增加一行 ,难度为 中等

Tag : 「深度优先搜索」

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

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

加法规则如下:

  • 给定整数 depth,对于深度为 depth - 1 的每个非空树节点 cur ,创建两个值为 val 的树节点作为 cur 的左子树根和右子树根。
  • cur 原来的左子树应该是新的左子树根的左子树。
  • cur 原来的右子树应该是新的右子树根的右子树。
  • 如果 depth == 1 意味着 depth - 1 根本没有深度,那么创建一个树节点,值 val 作为整个原始树的新根,而原始树就是新根的左子树。

示例 1:

image.png

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

示例 2:

image.png

输入: 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

深度优先搜索

题解思路:这道题目原先的题目意思我还没有看懂,导致我解题的时候没有对应的思路,导致我不懂的原因就是定位需要插入的位置的代码,那么我就来说明一下我的理解,首先root的节点的深度定义为1,那么插入位置的定义就是depth-1处,这时候只需要在该层进行插入的代码即可。定位该层就需要不断的递归搜索,因为root节点等于1的缘故,所以depth=2的时候就代表到达了这个位置。其他的就是临界条件的判断。详情见以下代码:

题解代码

/**
 * Solution操作类
 *
 * @author JackPan
 * @date 2022/08/05 13:06
 **/
public class Solution {

    public TreeNode addOneRow(TreeNode root, int val, int depth) {

        if (root == null) {
            return null;
        }

        if (depth == 1) {
            return new TreeNode(val, root, null);
        }

        if (depth == 2) {
            root.left = new TreeNode(val, root.left, null);
            root.right = new TreeNode(val, null, root.right);
        } else {
            root.left = addOneRow(root.left, val, depth - 1);
            root.right = addOneRow(root.right, val, depth - 1);
        }

        return root;
     }



      public class TreeNode {
          int val;
          TreeNode left;
          TreeNode right;
          TreeNode() {}
          TreeNode(int val) { this.val = val; }
          TreeNode(int val, TreeNode left, TreeNode right) {
              this.val = val;
              this.left = left;
              this.right = right;
          }
      }
}

结尾

我的"刷完LeetCode题库"系列文章的第 No.623 序号的题目,本次刷题之旅系列开始于 2022-06-12,因为LeetCode上部分是有锁题,我自己的目标是将先把所有不带锁的题目刷完。自己能够通过这次刷题之旅勉励自己,并且提升逻辑思维能力。这个系列的文章就是会见证我自己的一个成长过程!

思路虽然不是最优的,但是我会尽我所能!

为了让我自己的刷题之旅不中断,我特地建立了相关的仓库,来记录我自己的刷题之旅。 github.com/jackpan123/…