알고리즘/알고리즘 문제풀이

BinaryTree_Leetcode_102. Binary Tree Level Order Traversal [swift]

Downey 2025. 2. 24. 15:25

https://leetcode.com/problems/binary-tree-level-order-traversal/description/?envType=study-plan-v2&envId=top-100-liked

 

요구사항

  • 이진트리가 주어짐
  • 같은 depth끼리 Array로 묶어야 함.
  • 같은 depth에서는 left to right순서로 정렬되어야 함.

문제접근

  • DFS로 재귀탐색 수행
  • 전역 [[Int]]에 방문하는 node.val을 저장.
  • depth 별로 저장하므로, 선위, 중위순회가 중요하지 않음. (후위 순회는 안된다. right를 먼저 저장하게 됨)

정답코드

더보기
/**
 * 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 sol = [[Int]]()
    func levelOrder(_ root: TreeNode?) -> [[Int]] {
        guard let root else { return sol }
        traversal(next: root, depth: 0)

        return sol
    }

    func traversal(next node: TreeNode?, depth: Int) {
        guard let node else { return }
        addToAnswer(node.val, to: depth)
        var currentDepth = depth + 1

        traversal(next: node.left, depth: currentDepth)
        traversal(next: node.right, depth: currentDepth)

    }

    func addToAnswer(_ answer: Int, to index: Int) {
        while sol.count - 1 < index {
            sol.append([])
        }
        sol[index].append(answer)
    }

}

 

당연한건데, 되짚게 된 점이 있다.

func addToAnswer의 내부의 구현에서

sol[index] == nil 을 시도했었다.

근데 이런건 안됨.. element가 존재하지 않으니까