检查二叉树是否可搜索

时间:2017-10-31 12:12:15

标签: swift binary-tree

我知道这里有很多答案,但我找不到一个Swift 3+来检查我写的内容。我知道我会在强行解开子节点时遇到问题 - 请参阅下面的代码:

func isBST(_ node:Tree) -> Bool  {
    return validNode(node:node, minValue:INT8_MIN, maxValue:INT8_MAX)

}

func validNode(node: Tree, minValue:Int32, maxValue:Int32) -> Bool {

    return node.value > minValue && node.value < maxValue && validNode(node:node.leftChild!, minValue: minValue, maxValue: Int32(node.value)) && validNode(node:node.rightChild!, minValue: Int32(node.value), maxValue: maxValue)

}

最终我会打一片叶子,节点将是零。但是(我正在教自己斯威夫特,所以忍受我)我不知道如何解决这个问题。我是否为节点添加了nil合并 - node:node.leftChild?零?任何帮助,将不胜感激。

1 个答案:

答案 0 :(得分:2)

你可以尝试

func validNode(node: Tree?, minValue:Int32, maxValue:Int32) -> Bool {
    guard let node = node else { return true }
    return node.value > minValue
        && node.value < maxValue 
        && validNode(node:node.leftChild, minValue: minValue, maxValue: Int32(node.value)) 
        && validNode(node:node.rightChild, minValue: Int32(node.value), maxValue: maxValue)
}

这允许validNode()函数接受节点的nil值,当它接收到nil值时,你已经命中了一个叶节点,所以返回true。