951. Retourner les arbres binaires équivalents
Difficulté :Moyen
Sujets : Arbre, recherche en profondeur d'abord, arbre binaire
Pour un arbre binaire T, nous pouvons définir une opération de retournement comme suit : choisissez n'importe quel nœud et échangez les sous-arbres enfants gauche et droit.
Un arbre binaire X est équivalent flip à un arbre binaire Y si et seulement si on peut rendre X égal à Y après un certain nombre d'opérations de retournement.
Étant donné les racines de deux arbres binaires root1 et root2, renvoie true si les deux arbres sont équivalents ou faux sinon.
Exemple 1 :
Exemple 2 :
Exemple 3 :
Contraintes :
Solution :
Nous pouvons utiliser une recherche récursive en profondeur d'abord (DFS). L'idée est que deux arbres sont équivalents si leurs valeurs de racine sont les mêmes, et que les sous-arbres sont soit les mêmes (sans aucun retournement), soit ils deviennent identiques après avoir retourné les enfants gauche et droit à certains nœuds.
Cas de base :
Cas récursif :
Implémentons cette solution en PHP : 951. Retourner les arbres binaires équivalents
<?php // Definition for a binary tree node. class TreeNode { public $val; public $left; public $right; function __construct($val = 0, $left = null, $right = null) { $this->val = $val; $this->left = $left; $this->right = $right; } } /** * @param TreeNode $root1 * @param TreeNode $root2 * @return Boolean */ function flipEquiv($root1, $root2) { ... ... ... /** * go to ./solution.php */ } // Example usage: $root1 = new TreeNode(1, new TreeNode(2, new TreeNode(4), new TreeNode(5, new TreeNode(7), new TreeNode(8))), new TreeNode(3, new TreeNode(6), null) ); $root2 = new TreeNode(1, new TreeNode(3, null, new TreeNode(6)), new TreeNode(2, new TreeNode(4), new TreeNode(5, new TreeNode(8), new TreeNode(7))) ); var_dump(flipEquiv($root1, $root2)); // Output: bool(true) ?>
Classe TreeNode : La classe TreeNode représente un nœud dans l'arborescence binaire, avec un constructeur pour initialiser la valeur du nœud, l'enfant gauche et l'enfant droit.
Fonction flipEquiv :
Liens de contact
Si vous avez trouvé cette série utile, pensez à donner une étoile au référentiel sur GitHub ou à partager la publication sur vos réseaux sociaux préférés ?. Votre soutien signifierait beaucoup pour moi !
Si vous souhaitez du contenu plus utile comme celui-ci, n'hésitez pas à me suivre :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!