itisjustK
코딩과 사람 사는 이야기
itisjustK
전체 방문자
오늘
어제
  • 분류 전체보기 (207)
    • 일이삼사오육칠팔구십일이삼사오육칠팔구십일이삼사오육칠.. (0)
    • Web (43)
      • html & css (9)
      • django & python (15)
      • java script (9)
    • iOS (51)
      • Swift (42)
      • SwiftUI (5)
    • CS (25)
      • 자료구조 (6)
      • 운영체제 (3)
      • 데이터베이스 (9)
      • 네트워크 (7)
    • PS (34)
      • 알고리즘 & 자료구조 (0)
    • Life (36)
    • Retrospective (15)
    • Book (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 개발자
  • SWIFT
  • 생활코딩
  • 연결리스트
  • 생활코딩 #이고잉 #HTML #코딩 #개발자
  • CS
  • 독립서점
  • crud
  • binding
  • 점주
  • ios
  • mongodb
  • 어플
  • AppleDevloperAcademy
  • 세그멘테이션
  • SwiftUI
  • CoreData
  • 킨디
  • POSTECH
  • nosql

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
itisjustK

코딩과 사람 사는 이야기

[Leetcode - Swift] 94. Binary Tree Inorder Traversal
PS

[Leetcode - Swift] 94. Binary Tree Inorder Traversal

2023. 2. 1. 13:56

문제

https://leetcode.com/problems/binary-tree-inorder-traversal/description/

 

Binary Tree Inorder Traversal - LeetCode

Binary Tree Inorder Traversal - Given the root of a binary tree, return the inorder traversal of its nodes' values.   Example 1: [https://assets.leetcode.com/uploads/2020/09/15/inorder_1.jpg] Input: root = [1,null,2,3] Output: [1,3,2] Example 2: Input: ro

leetcode.com

 

풀이

이진 트리의 순회 방법에는 레벨, 전위, 중위, 후위 순회가 있다.

레벨 순회는 BFS로 구현할 수 있고, 전위, 중위, 후위 순회는 DFS로 구현할 수 있다.

 

👉🏼 방문 순서

전위 순회 : root -> left -> right

중위 순회 : left -> root -> right

후위 순회 : left -> right -> root

 

나는 DFS로 중위 순회를 구현하였고, 재귀를 활용하였다.

처음 생각해낸 풀이로는, 맨 끝에 도달하게 되는 base case로 빈 배열의 타입을 반환한다는 게 이해가 잘 안가서, Int 타입을 반환하는 새로운 함수 dfs를 구현해주었고, 이 dfs 함수를 재귀적으로 호출해주었다.

하지만 다른 풀이를 참고하니, 배열에 배열을 더해주기 때문에 괜찮다는 것을 알게 되었다. 그래서 본 함수를 재귀로 구현해주었다.

 

코드

import Foundation

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 {
    func inorderTraversal(_ root: TreeNode?) -> [Int] {
        var visited = [Int]()
        func dfs(_ current: TreeNode?) {
            if let current = current {
                dfs(current.left)
                visited.append(current.val)
                dfs(current.right)
            } else {
                return
            }
        }
        dfs(root)
        return visited
    }
}

class Solution2 {
    func inorderTraversal(_ root: TreeNode?) -> [Int] {
        guard let current = root else { return [] }
        return inorderTraversal(root?.left) + [current.val] + inorderTraversal(current.right)
    }
}
저작자표시 (새창열림)

'PS' 카테고리의 다른 글

[프로그래머스 - Swift] 오픈 채팅방 (2019 KAKAO BLIND RECRUITMENT)  (0) 2023.02.15
[Leetcode - Swift] 111. Minimum Depth of Binary Tree  (0) 2023.02.01
[백준 - Swift] 19583 사이버 개강총회  (0) 2023.01.24
[백준 - Swift] 4358 생태학  (0) 2023.01.20
[백준 - Swift] 10799 쇠막대기  (0) 2023.01.19
    'PS' 카테고리의 다른 글
    • [프로그래머스 - Swift] 오픈 채팅방 (2019 KAKAO BLIND RECRUITMENT)
    • [Leetcode - Swift] 111. Minimum Depth of Binary Tree
    • [백준 - Swift] 19583 사이버 개강총회
    • [백준 - Swift] 4358 생태학
    itisjustK
    itisjustK

    티스토리툴바