2017-10-31 30 views
0

これはここにたくさんの回答がありますが、私が書いたものをチェックするために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に対してnil coalescingを入れますか?なし?どんな助けもありがとう。

答えて

2

あなたは、これはノードのためのゼロ値を受け入れvalidNode()関数を可能にし、それがnil値を受信したとき、あなたは真を返すので、リーフノードを直撃している

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) 
} 

試みることができます。

+0

ノードがnilの場合は、確かにfalseを返しますか? – Fogmeister

+0

次にvalidNode()は常にfalseを返します。最終的にリーフノードに到達し、返されたfalseが伝播します。 – Spads

+0

あなたが正しい。私の悪い – Fogmeister

関連する問題