0x00 题目
给定一个二叉树的根 root
和两个整数 val
和 depth
在给定的深度 depth
处添加一个值为 val
的节点行
注意:根节点 root
位于深度 1
加法规则如下:
给定整数 depth
对于深度为 depth - 1
的每个非空树节点 cur
创建两个值为 val
的树节点作为 cur
的左子树根和右子树根
cur
原来的 左子树
应该是新的 左
子树根的 左子树
cur
原来的 右子树
应该是新的 右
子树根的 右子树
如果 depth == 1
意味着 depth - 1
根本没有深度
那么创建一个树节点
值 val
作为整个原始树的新根
而 原始树
就是新根的 左子树
0x01 思路
因为要添加 一整行
所以要先 找到
要添加新节点的行
使用 层序
遍历方式
先找到 目标行
再添加新节点
即可
0x02 解法
语言:Swift
树节点:TreeNode
public class TreeNode {
public var val: Int
public var left: TreeNode?
public var right: TreeNode?
public init() { self.val = 0; self.left = nil; self.right = nil; }
public init(_ val: Int) { self.val = val; self.left = nil; self.right = nil; }
public init(_ val: Int, _ left: TreeNode?, _ right: TreeNode?) {
self.val = val
self.left = left
self.right = right
}
}
解法:
func addOneRow(_ root: TreeNode?, _ val: Int, _ depth: Int) -> TreeNode? {
guard let root = root else { return root }
// depth 为 1 时
if depth == 1 {
let node = TreeNode(val)
node.left = root
return node
}
// 插入新节点方法
func insert(_ root: TreeNode, _ val: Int) {
let left = TreeNode(val)
let right = TreeNode(val)
left.left = root.left
right.right = root.right
root.left = left
root.right = right
}
// 深度
var d: Int = 1
var queue: [TreeNode] = []
queue.append(root)
while !queue.isEmpty {
// 找到目标行
if d == depth - 1 {
// 整行都要插入新节点
for node in queue {
insert(node, val)
}
break
}
// 下一层节点
var temp: [TreeNode] = []
while !queue.isEmpty {
let node = queue.removeFirst()
if let left = node.left {
temp.append(left)
}
if let right = node.right {
temp.append(right)
}
}
// 下一层
queue = temp
// 深度加 1
d += 1
}
return root
}
0x03 我的作品
欢迎体验我的作品之一:小笔记
让笔记 一步到位!
App Store
搜索即可~