//はBST検索ツリーバイナリソートツリー== 1、再帰的な既知の最大値と最小値か否かを判断します。2、単調か否かを判定するために BOOL IsValidBST(BTNODE * P、INT低、INT ハイ){ IF(P == NULL){ リターン trueに; } そうでなければ{ IF(低<P->高データ&&> P-> データ){ リターン(IsValidBST(P-> lchild、ロー、ハイ)&& IsValidBST(P - > rchild、ロー、ハイ)); } 他{ リターン falseに; } } } 無効 IsBST(BTNODE * P、INT&K、BOOL&失敗){ 場合(P &&!失敗){ IsBST(P - > )lchild、K、失敗。 もし(K <P-> データ){ K = P-> データ。 } 他{ 失敗 = 真。 } IsBST(P - > rchild、K、失敗); } }
BOOL isValidBST(ツリーノード* ルート){ ベクトル < INT > RES。 isValidBST(根、RES)。 INT LEN = res.size()。 ブールフラグ= 真。 以下のために(INT iが= 0 ; I <len- 1 ; I ++ ){ 場合(RES [i]が> = RES [I + 1 ]){ フラグ = 偽。 休憩; } } 戻りフラグ。 } ボイド isValidBSTOrder(ツリーノード*根、ベクトル<INT >&RES){ 場合(ルート== NULL) のリターン; isValidBST(ルート - > 左、RES); res.push_back(ルート - > val)で、 isValidBST(ルート - > 右、RES); }
// 判断是否为BST ブール失敗= 偽; 空 IsBST(BTNODE * P、INT&K、BOOL&失敗){ 場合(P &&!失敗){ IsBSTた(p - > lchild、K、失敗)。 もし(K <P-> データ){ K = P-> データ。 } 他{ 失敗 = 真。 } IsBST(P - > rchild、K、失敗); } }