Menu
CoddyTech

Subtree of Another Tree

Vous recevez deux arbres binaires, root et subRoot, chacun stocké dans un tableau en parcours par niveaux : la racine à l’index 0, les enfants de l’index i aux index 2*i+1 (à gauche) et 2*i+2 (à droite), et -1 pour un emplacement vide. Un tableau peut se terminer par des entrées -1 supplémentaires.

Renvoyez true si un nœud de root, avec tous ses descendants, a exactement la même forme et les mêmes valeurs que subRoot, et false dans le cas contraire. L’arbre entier root compte également.

Fonction

isSubtree(root: integer-array, subRoot: integer-array) → boolean
rootinteger-array
l’arbre dans lequel effectuer la recherche, en parcours par niveaux, avec -1 pour une position vide
subRootinteger-array
l’arbre à rechercher, dans le même format
Renvoieboolean
vrai si subRoot apparaît dans root comme un nœud avec tous ses descendants, faux sinon

Contraintes

  • 1 ≤ root.length ≤ 32767 et 1 ≤ subRoot.length ≤ 32767
  • Chaque entrée est -1 ou une valeur comprise entre 0 et 104.
  • root[0] et subRoot[0] ne sont jamais -1, donc les deux arbres ont au moins un nœud.
  • L’un ou l’autre tableau peut se terminer par des entrées -1 supplémentaires après son dernier nœud.
  • Les deux enfants d’un emplacement vide sont également vides, et chaque arbre a une profondeur d’au plus 14.
  • Les valeurs peuvent se répéter.

Exemples

Entrée
root = [6, 2, 8, 1, 3, -1, 9]subRoot = [2, 1, 3]
Sortie
true
Explication
Le nœud 2 à l’indice 1 a pour enfants 1 et 3, et tous deux sont des feuilles. C’est exactement subRoot.
challenge icon

Pour aller plus loin

Peux-tu attribuer une empreinte à chaque sous-arbre à partir de sa valeur et des empreintes de ses enfants, de sorte qu’une comparaison avec subRoot coûte O(1) ? Que fais-tu lorsque deux sous-arbres différents entrent en collision ?

Réinitialiser le code
def isSubtree(root, subRoot):
    # Écrivez le code ici

Test #1

Test #2

Test #3

Arguments

root = [6, 2, 8, 1, 3, -1, 9]
subRoot = [2, 1, 3]

Résultat attendu

true