간만에 문제풀어봤다.
타겟 뎁스에 맞춰서 새로운 노드를 형성해주고, 기존의 노드의 위상을 같이 추가해주면 되는 쉬운 문제다.
코드는 아래와 같다
/**
* Definition for a binary tree node.
* 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
* }
* }
*/
class Solution {
var targetDepth = 0
func addOneRow(_ root: TreeNode?, _ val: Int, _ depth: Int) -> TreeNode? {
self.targetDepth = depth
if depth == 1 {
let node = root
let newNode = TreeNode(val, node, nil)
return newNode
}
searchTree(root, val, 1)
return root
}
func searchTree(_ node: TreeNode?, _ val: Int, _ nowDepth: Int) {
if node == nil {
return
}
if nowDepth + 1 == targetDepth {
let left = node?.left
let right = node?.right
let newLNode = TreeNode(val, left, nil)
let newRNode = TreeNode(val, nil, right)
node?.left = newLNode
node?.right = newRNode
}
searchTree(node?.left, val, nowDepth + 1)
searchTree(node?.right, val, nowDepth + 1)
}
}