1367. Liste chaînée dans l'arbre binaire
Difficulté :Moyen
Sujets : Liste chaînée, arbre, recherche en profondeur d'abord, recherche en largeur d'abord, arbre binaire
Étant donné une racine d'arbre binaire et une liste chaînée avec head comme premier nœud.
Renvoyer True si tous les éléments de la liste chaînée à partir de la tête correspondent à un chemin descendant connecté dans l'arbre binaire sinon renvoyer False.
Dans ce contexte, un chemin descendant signifie un chemin qui commence à un nœud et descend.
Exemple 1 :
Exemple 2 :
Exemple 3 :
Contraintes :
Indice :
Solution :
Nous devons vérifier récursivement si une liste chaînée peut correspondre à un chemin descendant dans un arbre binaire. Nous utiliserons la recherche en profondeur (DFS) pour explorer l'arbre binaire et tenter de faire correspondre la liste chaînée de sa tête aux nœuds feuilles.
Voici comment nous pouvons aborder la solution :
Implémentons cette solution en PHP : 1367. Liste chaînée dans l'arbre binaire
val = $val; $this->next = $next; } } // Definition for a binary tree node. class TreeNode { public $val = 0; public $left = null; public $right = null; function __construct($val = 0, $left = null, $right = null) { $this->val = $val; $this->left = $left; $this->right = $right; } } class Solution { /** * @param ListNode $head * @param TreeNode $root * @return Boolean */ function isSubPath($head, $root) { ... ... ... /** * go to ./solution.php */ } // Helper function to match the linked list starting from the current tree node. function dfs($head, $root) { ... ... ... /** * go to ./solution.php */ } } // Example usage: // Linked List: 4 -> 2 -> 8 $head = new ListNode(4); $head->next = new ListNode(2); $head->next->next = new ListNode(8); // Binary Tree: // 1 // / \ // 4 4 // \ \ // 2 2 // / \ / \ // 1 6 8 8 $root = new TreeNode(1); $root->left = new TreeNode(4); $root->right = new TreeNode(4); $root->left->right = new TreeNode(2); $root->right->left = new TreeNode(2); $root->left->right->left = new TreeNode(1); $root->left->right->right = new TreeNode(6); $root->right->left->right = new TreeNode(8); $root->right->left->right = new TreeNode(8); $solution = new Solution(); $result = $solution->isSubPath($head, $root); echo $result ? "true" : "false"; // Output: true ?>Explication:
isSubPath($head, $root) :
- Cette fonction vérifie récursivement si la liste chaînée commençant par $head correspond à un chemin descendant dans l'arborescence.
- Il vérifie d'abord si le nœud racine actuel est le début de la liste (en appelant dfs).
- Sinon, il recherche récursivement les sous-arbres gauche et droit.
dfs($head, $root) :
- Cette fonction d'assistance vérifie si la liste chaînée correspond à l'arborescence commençant au nœud d'arborescence actuel.
- Si la liste est entièrement parcourue ($head === null), elle renvoie vrai.
- Si le nœud de l'arbre est nul ou si les valeurs ne correspondent pas, il renvoie false.
- Sinon, il continue de vérifier les enfants gauche et droit.
Exemple d'exécution :
Pour l'entrée head = [4,2,8] et root = [1,4,4,null,2,2,null,1,null,6,8], l'algorithme :
Cette solution vérifie efficacement le sous-chemin dans l'arborescence binaire à l'aide de DFS.
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!