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 { p> }
'' ' p> p>
3 Réponses :
Array1.length code>, je pense que vous les jugerez égal (retour vrai code>). Vous devez probablement utiliser q code> et r code> pour déterminer si le nombre d'éléments est identique et le nombre d'éléments à comparer. Li>
- Si les deux racines sont
null code>, je m'attendrais à ce que les arbres soient considérés comme égaux, mais vous retournerez faux code>. li>. LI>.
- Même si
root1 == null code>, vous devez toujours prendre les feuilles de root2 code> et vice versa. li>.
- Je pense que vous devriez faire dans l'ordre dans l'ordre em>, c'est-à-dire appeler
Leafsimilar (root1.left, root2.left) code> avant em> vous Regardez root1.val code> et root2.val code>. Il se peut que cela n'a pas d'importance car le Val code> est uniquement pris en compte pour les feuilles, mais je trouve qu'il est difficile d'être sûr de 100%. Li>
ol>
J'ai peut-être manqué quelque chose. P>
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. P>
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);
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.
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);
Je ne comprends pas quel arbre
[3,5,1,6,2,9,8, null, null, 7,4] code> 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.