• 力扣623.在二叉树中增加一行 dfs


    题目

    给定一个二叉树的根 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

    Related Topics

    • 深度优先搜索
    • 广度优先搜索
    • 二叉树

    来源:力扣(LeetCode)
    链接:https://leetcode.cn/problems/add-one-row-to-tree
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    思路

    深度优先遍历 ,记录每层的深度,到达 depth-1 层时,添加节点

    代码

    class Solution {
        public TreeNode addOneRow(TreeNode root, int val, int depth) {
            if (depth == 1){
                TreeNode node = new TreeNode(val);
                node.left = root;
                return node;
            }
            dfs(root,val,depth,1);
            return root;
        }
        public void dfs(TreeNode root, int val, int depth,int currDepth){
            if (root == null) return;
            if (currDepth == depth - 1){
                TreeNode leftNode = new TreeNode(val);
                TreeNode rightNode = new TreeNode(val);
                leftNode.left = root.left;
                root.left = leftNode;
                rightNode.right = root.right;
                root.right = rightNode;
            }else {
                dfs(root.left,val,depth,currDepth+1);
                dfs(root.right,val,depth,currDepth+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
  • 相关阅读:
    详细介绍C++日期类的实现
    unity OnMouse生命周期
    springsecurity的学习(三):自定义的认证
    数字IC设计笔试面试经典题(1-10)
    VCS自带的UPF低功耗仿真demo介绍
    diskgenius数据恢复软件,亲测可用!
    大话CAS
    Android 和 iOS 漏洞加剧移动安全的威胁
    C++:获取文件末的50个字符(附完整源码)
    【备忘】navicat mysql导入导出小经验
  • 原文地址:https://blog.csdn.net/qq_52476654/article/details/126173633