0
votes

Trouvez si 2 arbres ont des feuilles similaires (de gauche à droite)?

En ce qui concerne ma logique, j'utilise deux tableaux différents pour stocker toutes les feuilles, puis comparez ces tableaux pour voir si les feuilles sont effectivement les mêmes, mais mes cas de test échouent (par exemple, [3,5 , 1,6,2,9,8, NULL, NULL, 7,4] [3,5,1,6,7,4,2, NULL, NULL, NULL, NULL, NULL, NULL, 9,8]). Merci d'avance!

'' ' Solution de classe { xxx

} '' '


3 commentaires

Je ne comprends pas quel arbre [3,5,1,6,2,9,8, null, null, 7,4] représente.


le premier arbre.


Désolé, je n'étais pas clair. Je ne comprends pas comment cela peut représenter un arbre. Je ne sais pas à quoi ressemble l'arbre. Je ne sais pas quels nœuds qu'il consistent en particulier et en particulier quel nœud est un enfant gauche ou droit dont d'autres nœuds.


3 Réponses :


0
votes
  1. Si les tableaux ont des longueurs différentes, mais sont d'accord sur le premier Array1.length , je pense que vous les jugerez égal (retour vrai ). Vous devez probablement utiliser q et r pour déterminer si le nombre d'éléments est identique et le nombre d'éléments à comparer.
  2. Si les deux racines sont null , je m'attendrais à ce que les arbres soient considérés comme égaux, mais vous retournerez faux . . .
  3. Même si root1 == null , vous devez toujours prendre les feuilles de root2 et vice versa. .
  4. Je pense que vous devriez faire dans l'ordre dans l'ordre , c'est-à-dire appeler Leafsimilar (root1.left, root2.left) avant vous Regardez root1.val et root2.val . Il se peut que cela n'a pas d'importance car le Val est uniquement pris en compte pour les feuilles, mais je trouve qu'il est difficile d'être sûr de 100%.

    J'ai peut-être manqué quelque chose.

    Utiliser deux tableaux différents pour stocker toutes les feuilles devrait être une stratégie sonore. Je pense que ce sera plus facile si vous traitez chaque arbre séparément, pas les deux arbres à la fois.


0 commentaires

0
votes

Votre programme échouera pour le cas d'essai:

public int leafSimilar(TreeNode root, int arr[], int l) {

    if(root == null)
    {
        return l;
    }

    if(root.left == null && root.right == null)
    {
        arr[l] =root.val ;
        l+=1;
        return l;
    }        
    l = leafSimilar(root.left, l);
    l = leafSimilar(root.right, l);
    return l;
}

public boolean compareLeaves(int arr1[], int arr2[], int l, int r)
 {
     if( l != r ) return false;

     for(int i = 0; i <l ;i ++)
     {
       boolean flag = true;
        for(int j = 0; j <r ;j ++) {
         if(arr1[i] == arr2[j])
         {
            flag = false;
            break;
         }
       }
       if( flag) return false;
    }
     return true;
 }

int l = leafSimilar(root1, arr1, 0);
int r = leafSimilar(root2, arr2, 0);
compareLeaves(arr1, arr2, l, r);


1 commentaires

Réponse intelligente, mais depuis que le problème peut être des devoirs, je pense que vous vous donnez trop de choses et laissant trop peu de place pour que le questionneur écrit son propre programme et apprennent de le faire.



0
votes

La ligne de code ci-dessous suggère à la fois l'arborescence de suivre le même chemin, en ignorant les feuilles dans l'un des arborescent1 code> ou arbores2 code>.

 isSimilar(root1, 0);
 isSimilar(root2, 1);


0 commentaires