2017-05-27 6 views
0

私は解決すべき課題があります。私はこのようなバイナリツリーを持っています。ルートは11、11の子は5と8、5の子は13と12、8の右の子は14です。バイナリツリーの葉がパス内に最大であるかどうかを判断する機能

私はすべてのリーフを調べ、リーフがルートからリーフまでのパスの最大値であればtrueを返し、そうでない場合はfalseを返します。したがって、たとえばリーフ14では、ルート(11)から1つのノード(5)があり、14が最大であるため、これは明らかです。

これは再帰的な関数でなければならないことは知っていますが、これにどのように対処するのかは実際考えていません。 Python、Java、C、Pascalの説明は素晴らしいですが、誰かが私にこれを解決するヒントを与えることができれば、私はすでにうれしいでしょう。この記事からCでbinary search tree verification

コードと非常によく似て

感謝:)

答えて

1

このタスク:

bool isBST(struct TreeNode *node, int minKey, int maxKey) { 
    if(node == NULL) return true; 
    if(node->key < minKey || node->key > maxKey) return false; 
    return isBST(node->left, minKey, node->key-1) && isBST(node->right, node->key+1, maxKey); 
} 

探索木が豊富な理論と単一の答えよりも大きいを持っています。あなたが望むなら、あなたはもっと深く行くことができます。お楽しみください:)

関連する問題