2017-07-28 4 views
0

私はHackerrankでBSTの問題をやっていました。ここでは、ツリーがBSTであれば真、BSTであれば真を返します。私は合計20件のうち4件が失敗しており、理由はわかりません。この問題を作成した人は、入力を処理してツリーを作成する方法に関する詳細情報を提供しませんでした。ツリーがJavaのバイナリ検索ツリーであるかどうかをチェックするコードは、テストケースが失敗しています。確かな理由

ここ
Map<Integer, Integer> numMap = new HashMap<Integer, Integer>(); 


    boolean checkDuplicates(int val){ 
     if(numMap.containsKey(val)){ 
      return false; 
     } 
     else{ 
      numMap.put(val, 1); 
      return true; 
     } 
    } 


    boolean checkBST(Node root) { 
     if(root.left == null && root.right == null){ 
      return (true && checkDuplicates(root.data)); 
     } 
     else if(root.left.data > root.data || root.right.data < root.data){ 
      return false; 
     } 
     else{ 
      if(root.left == null){ 
       return (checkBST(root.right) && checkDuplicates(root.data)); 
      } 
      else if(root.right == null){ 
       return (checkBST(root.left) && checkDuplicates(root.data)); 
      } 
      else{ 
       return (checkBST(root.left) && checkBST(root.right) && checkDuplicates(root.data)); 
      } 
     } 
    } 

がhackerrank問題へのリンクです:ここで

が私のコードで私が間違っているのは何https://www.hackerrank.com/challenges/ctci-is-binary-search-tree

/ここに見下ろしますか?

答えて

3

サブツリー内のすべてのノードは、ルートよりも小さく/大きくする必要があります。あなたはサブツリーのルートをチェックするだけです。例えば

これはBSTではありません。

 5 
    3  7 
1 6 

この条件はまた、重複しないことを意味し、あなたが別途ことを確認する必要はありません。

+0

質問には、作成するツリーの中には重複した値が含まれていると思います。重複した値をチェックしたときにいくつかの追加のテストケースを渡しました。回答の最初の部分について明確にすることはできますか?私はすべてのノードを再帰的にチェックしていると思った。 –

+0

Ohhhhhh。ありがとうございました。この例ではそれをクリアしました:) –

+0

これに近づく方法については今混乱しています。私はArrayListを作成し、現在の値と逆方向にチェックしながら値を追加する必要がありますか? –

関連する問題