それは有効な二分探索木(BST)であれば、バイナリツリーを考えると、決定します。
次のようにBSTが定義されていると想定します。
ノードの左サブツリーがキーでノードだけ含まれている よりも少ない ノードの鍵を。
ノードの右部分木は、キーを持つ唯一のノードが含ま より大きい ノードの鍵を。
左と右のサブツリーどちらも二分探索木でなければなりません。
バイナリツリーの合法的なテストをして下さい。
これは、左のノード自体よりも小さいすべての値は、すべての権利のノードが自分より大きいことが必要です。
したがって、各時間関数が戻ると、ノードNの左ノードがNの値より大きくなければならないN未満&&より大きくなければならない、N &&右ノードは、Nの値未満より大きくなければならない未満であるべきです。
/ **
*バイナリツリーノードの定義。
*構造体のTreeNode {
* int型のval;
*のTreeNode *左;
*のTreeNode *右;
*ツリーノード(int型X):(NULL)左のval(X)、右(NULL){}
*}。
* /
クラスのソリューション{
パブリック:
BOOL isValidBST(ツリーノード*ルート){
返すisValidBST(根、NULL、NULL);
}
BOOL isValidBST(ツリーノード*根、ツリーノード* minNode、ツリーノード* maxNode){
(!ルート)がtrueを返す場合は、
IF(minNode && root->ヴァル<= minNode->ヴァル|| maxNode && root->値> = maxNode->ヴァル)
falseを返します。
isValidBST(root->左、minNode、根)&& isValidBST(root->右、根、maxNode)を返します。
}
}。