当前位置:网站首页>2022.08.05_每日一题
2022.08.05_每日一题
2022-08-09 18:00:00 【诺.い】
623. 在二叉树中增加一行
题目描述
给定一个二叉树的根 root
和两个整数 val
和 depth
,在给定的深度 depth
处添加一个值为 val
的节点行。
注意,根节点 root
位于深度 1
。
加法规则如下:
- 给定整数
depth
,对于深度为depth - 1
的每个非空树节点cur
,创建两个值为val
的树节点作为cur
的左子树根和右子树根。 cur
原来的左子树应该是新的左子树根的左子树。cur
原来的右子树应该是新的右子树根的右子树。- 如果
depth == 1
意味着depth - 1
根本没有深度,那么创建一个树节点,值val
作为整个原始树的新根,而原始树就是新根的左子树。
示例 1:
输入: root = [4,2,6,3,1,5], val = 1, depth = 2
输出: [4,1,1,2,null,null,6,3,1,5]
示例 2:
输入: 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
coding
1.深度优先
/** * Definition for a binary tree node. * 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; * } * } */
class Solution {
int val;
int depth;
public TreeNode addOneRow(TreeNode root, int val, int depth) {
this.val = val;
this.depth = depth;
if(depth == 1){
return new TreeNode(val, root, null);
}
dfs(root, 1);
return root;
}
public void dfs(TreeNode node, int curDepth){
if(curDepth == depth - 1){
if(node != null){
node.left = new TreeNode(val, node.left, null);
node.right = new TreeNode(val, null, node.right);
}
return;
}
if (node != null){
dfs(node.left, curDepth + 1);
dfs(node.right, curDepth + 1);
}
}
}
2.广度优先
/** * Definition for a binary tree node. * 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; * } * } */
class Solution {
public TreeNode addOneRow(TreeNode root, int val, int depth) {
if(depth == 1){
return new TreeNode(val, root, null);
}
List<TreeNode> temp1 = new ArrayList<>();
temp1.add(root);
for (int i = 1; i < depth - 1; i ++) {
List<TreeNode> temp2 = new ArrayList<>();
for(TreeNode node : temp1) {
if (node.left != null) {
temp2.add(node.left);
}
if (node.right != null) {
temp2.add(node.right);
}
}
temp1 = temp2;
}
for(TreeNode node : temp1) {
node.left = new TreeNode(val, node.left, null);
node.right = new TreeNode(val, null, node.right);
}
return root;
}
}
边栏推荐
- Paper sharing: "FED BN" uses the LOCAL BATCH NORMALIZATION method to solve the Non-iid problem
- [免费专栏] Android安全之APK动态方式逆向应用【三种Smali注入方法】
- Uniapp 应用未读角标插件 Ba-Shortcut-Badge
- YOLO v3 source, rounding
- 2022.08.06_每日一题
- 说了半天跨平台,今儿咱就来跨跨!(完结篇)——Kubenetes上手实践
- loadrunner script -- parameterization
- MQTT X Web:在线的 MQTT 5.0 客户端工具
- 论文分享:「FED BN」使用LOCAL BATCH NORMALIZATION方法解决Non-iid问题
- 史上最全架构师知识图谱(纯干货)
猜你喜欢
C语言知识补充
论文精读:VIT - AN IMAGE IS WORTH 16X16 WORDS: TRANSFORMERS FOR IMAGE RECOGNITION AT SCALE
IMX6ULL—Assembly LED Lights
[免费专栏] Android安全之Android Studion 动态调试APK的两种方法
.NET现代应用的产品设计 - DDD实践
Sublime Text如何安装Package Control
ceph 创建池和制作块设备基操
开源一夏 | 基于若依架构的列表详情展示
qq机器人账号不能发送群消息,被风控
[免费专栏] Android安全之静态方式逆向APK应用浅析【手动注入smali+】+【IDA Pro静态分析so文件】+【IDA Pro基础使用讲解】
随机推荐
电商项目架构图
[免费专栏] Android安全之Android工程模式
五种常用的排序方法
[免费专栏] Android安全之Root检测和绕过(浅析)
Simple prohibition of garbage collection in d
[免费专栏] Android安全之Xposed插件开发【从零手把手带】教程
对数学直观、感性的认知是理解数学、喜爱数学的必经之路,这本书做到了!
重定向操作
论文分享:「FED BN」使用LOCAL BATCH NORMALIZATION方法解决Non-iid问题
混动产品助力,自主SUV市场格局迎来新篇章
[免费专栏] Android安全之APK动态方式逆向应用【三种Smali注入方法】
ASP.NET Core依赖注入之旅:针对服务注册的验证
redirect action
英赛克工控安全项目入围《钢铁行业智能制造解决方案推荐目录》
2022.08.08_每日一题
ceph集群部署
sublime快速打开终端terminal
[免费专栏] Android安全之Android Fragment注入
winpe工具WEPE微PE工具箱
5.3.6 原子操作对非原子的操作排序