티스토리 뷰
🍏/Swift
[Swift] Binary Search Tree ( 이진 탐색 트리 ) 를 Swift로 구현해보자 + search / insert / delete
eungding 2018. 10. 15. 22:40728x90
반응형
일단 나는 Binary Tree랑 Binary Search Tree 랑 늘 헷갈리니까 개념부터 명확히!
( 출처 https://stackoverflow.com/questions/6380231/difference-between-binary-tree-and-binary-search-tree )
그니까 이진트리는 부모가 왼쪽 자식, 오른쪽 자식 ( 총 두개의 leaf ) 를 가질 수 있는 트리이다
이진 탐색트리는 현재 있는 노드보다 작은 값이 왼쪽에, 큰 값이 오른쪽에 있는 이진트리이다
아래와 같은 BST를 구현해보자
// https://www.raywenderlich.com/990-swift-algorithm-club-swift-binary-search-tree-data-structure 참고
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | // recursive enum 은 indirect 키워드 적어줘야함 indirect enum BinaryTree{ case empty case node(left:BinaryTree,data:Int,right:BinaryTree) } let tree:BinaryTree = .node( left: .node( left:.node(left:.empty,data:1,right:.empty), data:2, right:.node(left:.empty,data:3,right:.empty)), data:4, right: .node( left:.node(left:.empty,data:5,right:.empty), data:6, right:.node(left:.empty,data:7,right:.empty)) ) | cs |
1) 어떤 데이터가 BST에 있는 지 Search 해보자 ( where절은 정말 편하다 >_< )
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | extension BinaryTree{ func hasData(_ data:Int)->Bool{ switch self { case .empty: return false case let .node(_, nodeData, _) where data == nodeData: return true case let .node(left,nodeData,_) where data < nodeData: return left.hasData(data) case let .node(_,nodeData,right) where data > nodeData: return right.hasData(data) default: return false } } } | cs |
결과를 확인하면...
1 2 | print(tree.hasData(6)) // true print(tree.hasData(10)) // false | cs |
2) 새로운 데이터를 BST 에 Insert해보자
to be continued...
반응형
'🍏 > Swift' 카테고리의 다른 글
[Swift] ~= 연산자 (0) | 2019.04.29 |
---|---|
[Swift] Swift로 Binary Search( 이진 탐색 알고리즘 )를 구현해보자 (0) | 2019.03.30 |
[Swift] What’s New in Swift 4.2? (0) | 2018.10.06 |
[Swift] 동적프로그래밍 - 배낭채우기 문제를 Swift로 구현해보자 (0) | 2018.09.27 |
[Swift] Swift로 짜보는 다익스트라 알고리즘 (최단경로를 찾아요) (1) | 2018.09.19 |
댓글
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- ipad multitasking
- drf custom error
- flutter dynamic link
- flutter build mode
- Sketch 누끼
- Python Type Hint
- 플러터 얼럿
- cocoapod
- SerializerMethodField
- ribs
- Flutter getter setter
- Flutter Spacer
- 장고 Custom Management Command
- flutter 앱 출시
- Django FCM
- 플러터 싱글톤
- PencilKit
- METAL
- Dart Factory
- Django Heroku Scheduler
- DRF APIException
- Flutter 로딩
- Flutter Text Gradient
- Watch App for iOS App vs Watch App
- Django Firebase Cloud Messaging
- Flutter Clipboard
- github actions
- flutter deep link
- 구글 Geocoding API
- 장고 URL querystring
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함