BSTのアルゴリズムかどうかを判断するために、[バイナリツリーアルゴリズム]

//は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、失敗); 
    } 
}

おすすめ

転載: www.cnblogs.com/zzuuoo666/p/12083175.html