Daily LeetCode Challenge - 623. Add One Row on Tree

Min Young Kim·2022년 10월 5일
0

algorithm

목록 보기
2/198

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)
    }
}

문제를 보고 어떤 알고리즘을 사용할지 생각하는 것도 중요하지만 문제에서 요구하는 반환타입도 중요하다는 사실을 다시 한번 상기시킬 수 있었다.

profile
길을 찾는 개발자

0개의 댓글