バイナリプローブツリー実装
2071 ワード
バイナリナビゲーション
接続リスト
バイナリプローブツリー
class Node {
let value: Int
var leftChild: Node?
var rightChild: Node?
init(value: Int, leftChild: Node?, rightChild: Node?) {
self.value = value
self.leftChild = leftChild
self.rightChild = rightChild
}
}//Left Branch
let oneNode = Node(value: 1, leftChild: nil, rightChild: nil)
let fiveNode = Node(value: 5, leftChild: oneNode, rightChild: nil)
//Right Branchlet elevenNode = Node(value: 11, leftChild: nil, rightChild: nil)
let twentyNode = Node(value: 20, leftChild: nil, rightChild: nil)
let fourteenNode = Node(value: 14, leftChild: elevenNode, rightChild: twentyNode)
//TOPlet tenRootNode = Node(value: 10, leftChild: fiveNode, rightChild: fourteenNode)
func search(node: Node?, searchValue: Int) -> Bool { if node == nil {
return false
}
if node?.value == searchValue {
return true
}
// improve
else if searchValue < node?.value ?? 0 {
return search(node: node?.leftChild, searchValue: searchValue)
}
else {
return search(node: node?.rightChild, searchValue: searchValue)
}
// basic
else {
return search(node: node?.leftChild, searchValue: searchValue) ||
search(node: node?.rightChild, searchValue: searchValue)
}
}search(node: tenRootNode, searchValue: 20)
//improve version: 2 times
//basic version: 5 times
compared to arr
let arr = [1, 5, 10, 11, 14 ,20]
let index = arr.firstIndex(where: { $0 == 20 })//7 times
Reference
この問題について(バイナリプローブツリー実装), 我々は、より多くの情報をここで見つけました https://velog.io/@seungtae/이진탐색트리-구현テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol