• LeetCode-623-在二叉树中增加一行


    LeetCode-623-在二叉树中增加一行

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

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

    加法规则如下:

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

    示例 1:

    img

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

    示例 2:

    img

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

    提示:

    • 节点数在 [1, 104] 范围内
    • 树的深度在 [1, 104]范围内
    • -100 <= Node.val <= 100
    • -105 <= val <= 105
    • 1 <= depth <= the depth of tree + 1
    class Solution {
        public static 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;
          }
        }
    
    
        /**
         * 层次遍历, 找到要添加的那一层的上一层
         * 找到之后, 进行添加节点即可
         */
        public TreeNode addOneRow(TreeNode root, int val, int depth) {
            if (depth == 1) {
                return new TreeNode(val, root, null);
            }
            Queue<TreeNode> queue = new ArrayDeque<>();
            queue.add(root);
            for (int i = 1; i < depth - 1; i++) {
                int size = queue.size();
                for (int j = 0; j < size; j++) {
                    TreeNode node = queue.poll();
                    if (node.left != null) {
                        queue.offer(node.left);
                    }
                    if (node.right != null) {
                        queue.offer(node.right);
                    }
                }
            }
    
            int size = queue.size();
            for (int i = 0; i < size; i++) {
                TreeNode node = queue.poll();
                node.left = new TreeNode(val, node.left, null);
                node.right = new TreeNode(val, null, node.right);
            }
    
            return root;
        }
    
        public static void main(String[] args) {
            Queue<Integer> queue = new ArrayBlockingQueue<>(2);
            queue.add(1);
            queue.add(1);
            queue.add(1);
            System.out.println(queue.size());
        }
    }
    
            queue.add(1);
            queue.add(1);
            System.out.println(queue.size());
        }
    }
    
    • 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
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
  • 相关阅读:
    android studio开发app实例-基于Uniapp+SSM实现的公园植物介绍APP
    11. MySQL 备份、恢复
    lighttpd cgi不能重启
    基于springboot、vue汽车租赁系统
    Python基础知识讲解——main方法
    Kotlin | 在for、forEach循环中正确的使用break、continue
    【Java对象实例与文件之间互转】
    2023版 STM32实战5 基本定时器中断
    高教社杯数模竞赛特辑论文篇-2023年C题:商超蔬菜销售数据的统计分析及建模(附获奖论文及R语言和LINGO代码实现)(续)
    i5 1230u怎么样 i51230u相当于什么水平级别
  • 原文地址:https://blog.csdn.net/weixin_44939170/article/details/126190190