Problem From.
https://leetcode.com/problems/add-one-row-to-tree/
오늘 문제는 주어진 Tree 의 특정 depth 에 주어진 value 를 넣는 문제였다.
처음에는 문제의 반환 타입을 잘못 이해해서 Example 의 output 에 나와있는 모양대로 list 를 반환하는 형식인줄 알고, BFS 를 사용해서 풀려고 시도했다.
하지만 다시 문제를 제대로 읽어보니 특정 depth 에 value 를 삽입한 TreeNode 자체를 반환하는 문제여서 DFS 로 풀 수 있었다.
DFS 로 접근하여 TreeNode 를 반환하다가 문제에서 주어진 특정 depth 를 만나면 그때 value 가 담긴 TreeNode 를 생성하여, 왼쪽 Node 에는 왼쪽으로 이어 붙이고, 오른쪽 Node 에는 오른쪽으로 이어 붙이는 방식으로 해결 할 수 있었다.
아래는 풀이 코드
/**
* Example:
* var ti = TreeNode(5)
* var v = ti.`val`
* Definition for a binary tree node.
* class TreeNode(var `val`: Int) {
* var left: TreeNode? = null
* var right: TreeNode? = null
* }
*/
class Solution {
fun addOneRow(root: TreeNode?, `val`: Int, depth: Int): TreeNode? {
if(depth == 1) {
val node = TreeNode(`val`)
node.left = root
return node
}
addRow(root, `val`, depth, 1)
return root
}
private fun addRow(root : TreeNode?, `val` : Int, depth : Int, currentDepth : Int) {
if(root == null || currentDepth > depth) return
if(currentDepth == depth - 1) {
val leftNode = TreeNode(`val`)
val rightNode = TreeNode(`val`)
leftNode.left = root.left
rightNode.right = root.right
root.left = leftNode
root.right = rightNode
}
addRow(root.left, `val`, depth, currentDepth + 1)
addRow(root.right, `val`, depth, currentDepth + 1)
}
}
문제를 보고 어떤 알고리즘을 사용할지 생각하는 것도 중요하지만 문제에서 요구하는 반환타입도 중요하다는 사실을 다시 한번 상기시킬 수 있었다.