일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 명품cppProgramming c++
- CoreBluetooth
- DependencyInjection
- data_structure
- GCD
- MethodSwilzzling
- combine
- DiffableDataSource
- gitflow
- RaceCondition
- 오픈채팅방
- IOS
- 프로그래머스
- swift
- 청년취업사관학교
- SwiftUI
- DispatchQueue
- DynamicMemberLookup
- leetcode
- MainScheduler.asyncInstance
- SeSAC
- MainScheduler.Instance
- 코테
- 등굣길
- MainScheduler
- GIT
- SRP
- Realm
- rxswift
- cleanarchitecture
- Today
- Total
Do.
LeetCode - Binary Tree Level Order Traversal 본문
Given the root of a binary tree, return the level order traversal of its nodes' values. (i.e., from left to right, level by level).
Example 1:
Input: root = [3,9,20,null,null,15,7] Output: [[3],[9,20],[15,7]]
|
Example 2:
Input: root = [1] Output: [[1]]
|
Example 3:
Input: root = [] Output: []
|
Constraints:
The number of nodes in the tree is in the range [0, 2000].
-1000 <= Node.val <= 1000
class Solution {
func levelOrder(_ root: TreeNode?) -> [[Int]] {
var resultList: [[Int]] = []
//1
guard let node = root else {
return resultList
}
//2
var levelList: [Int] = []
resultList.append([node.val])
//3
var queue: [TreeNode?] = []
if let left = node.left {
queue.append(left)
}
if let right = node.right {
queue.append(right)
}
while true {
//4
queue.forEach {
if let node = $0 {
levelList.append(node.val)
}
}
//5
if levelList.isEmpty {
break
}
resultList.append(levelList)
levelList.removeAll()
//6
var count = queue.count
while count > 0, let node = queue.removeFirst() {
count -= 1
if let left = node.left {
queue.append(left)
}
if let right = node.right {
queue.append(right)
}
}
}
return resultList
}
}
1. 전달된 노드가 nil 일때는 빈 2차원 배열을 반환한다.
2. 각 층의 노드 값들을 모으는 1차원 배열로 2차원 배열 전달용으로 사용한다.
3. 노드를 레벨별로 접근하기 위한 자료형 queue로 사용할 예정이며 따로 자료구조는 만들지 않음, 루트 노드의 자식 노드들을 먼저 queue에 enqueue 함
4. queue를 순회하면서 해당 층에 있는 요쇼들을 1차원 배열에 등록함
5. while loop 중단점, levelList가 비어있으면 위 작업이 발생하지 않은 것으로 루프 중단 그 외 경우 진행하며 2차원 배열에 1차원 배열 등록 후 1차원 배열은 초기화 시켜준다.
6. queue에 등록된 요소들을 dequeue 할 때 동일 레벨의 요소만 dequeue 하기 위한 요소
트리 형 자료구조를 레벨별로 순회하는 방법을 Tree 자료 구조 할때 공부를 했었는데 요구하는 리턴 형태가 레벨별로 배열을 나열해야 하기 곤란했다. 지금 보니까 되게 별거 없네
처음으로 연결 리스트, 트리형 자료구조 문제 자력으로 풀었다. 근데 뭔가 불필요하게 장황한거 같은데 leetcode 솔루션이 유료라 확인은 못했다.. 사야하나...
'Algorithm' 카테고리의 다른 글
2019 KAKAO BLIND RECRUITMENT - 오픈 채팅방, Swift (0) | 2022.03.13 |
---|---|
2020 KAKAO BLIND RECRUITMET - 문자열 압축, Swift (0) | 2022.03.12 |
최대공약수와 최소공배수 (0) | 2022.02.09 |
Ring Buffer를 이용한 Queue 자료구조 구현, Swift (0) | 2022.02.09 |
Swift - Stack 구현하기 (0) | 2022.02.09 |