Chapter 15: Binary Search Tree Challenges
extension BinaryNode where Element: Comparable {
var isBinarySearchTree: Bool {
return isBST(self, min: nil, max: nil)
}
private func isBST(_ tree: BinaryNode<Element>?, min: Element?, max: Element?) -> Bool {
guard let tree = tree else {
// 空tree也是BST一種
return true
}
// 進行node特質檢查
if let min = min, tree.value <= min {
return false
} else if let max = max, tree.value > max {
return false
}
// 遞迴檢查每個node
return isBST(tree.leftChild, min: min, max: tree.value) && isBST(tree.rightChild, min: tree.value, max: max)
}
}Last updated