J'ai commencé à faire un problème de BST sur Hackerrank, où je devrais retourner vrai si un arbre est un BST, et faux sinon. J'échoue 4 des 20 cas et je ne sais pas pourquoi. La personne qui a fait ce problème n'a pas fourni d'informations détaillées sur la manière dont il gère les entrées et fabrique l'arbre.Le code permettant de vérifier si un arbre est un arbre de recherche binaire en Java échoue aux cas de test. Je ne sais pas pourquoi
Voici mon code:
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));
}
}
}
Voici un lien vers le problème de HackerRank: https://www.hackerrank.com/challenges/ctci-is-binary-search-tree
Qu'est-ce que je fais mal/ici donnent sur?
Dans la question, je crois que certains des arbres qu'ils créent contiennent des valeurs en double. J'ai fini par passer quelques cas de test supplémentaires lorsque j'ai vérifié les valeurs en double. Pouvez-vous clarifier la première partie de votre réponse? Je pensais que je vérifiais chaque nœud récursivement –
Ohhhhhh. Je vous remercie. L'exemple éclairci :) –
Je suis confus maintenant quant à la façon d'aborder cela. Dois-je créer une ArrayList et lui ajouter des valeurs lorsque je la traverse et que je vérifie la valeur actuelle? –