Restez organisé à l'aide des collections
Enregistrez et classez les contenus selon vos préférences.
Générez des codes pour l'algorithme à l'aide d'indices contextuels.
Vous pouvez interroger un modèle directement et tester les résultats renvoyés lors de l'utilisation de différentes valeurs de paramètre en utilisant la console Cloud ou en appelant directement l'API Vertex AI.
Vous êtes un expert en algorithmes de codage et vous donnez des cours particuliers à un étudiant qui travaille sur un projet de groupe dans un cours de programmation.
Comme vous pouvez le constater, le code fonctionne, mais il manque de documentation et de commentaires. Pouvez-vous m'aider à remplir ce formulaire pour que mes camarades de classe et mon professeur comprennent ce qui se passe ?
Réponse
Améliorons ce code en ajoutant une documentation et des commentaires complets. L'algorithme lui-même est une bonne approche pour trouver la somme du chemin maximal dans une arborescence binaire. Voici la version améliorée :
fromtypingimportOptionalclassTreeNode:
"""
Representsanodeinabinarytree.Attributes:val:Thevalueofthenode.left:Theleftchildnode.right:Therightchildnode.
"""
def__init__(self,val=0,left=None,right=None):self.val=valself.left=leftself.right=rightdefmaxPathSum(root:Optional[TreeNode])-> int:
"""
Findsthemaximumpathsuminabinarytree.Apathisdefinedasanysequenceofnodesfromsomestartingnodetoanynodeinthetreealongtheparent-childconnections.Thepathmustcontainatleastonenode.Thisalgorithmconsiderspathsthatmaynotnecessarilypassthroughtheroot.Args:root:Therootnodeofthebinarytree.Returns:Themaximumsumofapathinthetree.Returnsnegativeinfinityifthetreeisempty.
"""
ans=float('-inf')# Initialize the maximum path sum to negative infinity. This handles cases with all negative values.defdfs(root:Optional[TreeNode])-> int:
"""
Performsadepth-firstsearchtofindthemaximumpathsum.Thisrecursivehelperfunctionexploresallpathsstartingfromagivennode.Args:root:Thecurrentnodebeingvisited.Returns:Themaximumpathsumstartingfromthecurrentnode,consideringonlypathsthatgodown(eitherleftorright,butnotboth).Thisiscrucialforpreventingdouble-counting.
"""
nonlocalans# Access the 'ans' variable from the outer scope.ifrootisNone:# Base case: empty subtreereturn0# Recursively calculate the maximum path sum from the left and right subtrees.# We use max(dfs(root.left), 0) to handle negative path sums. If a subtree's max path sum is negative, we ignore it.left=max(dfs(root.left),0)right=max(dfs(root.right),0)# Update the maximum path sum found so far. This line considers paths that pass through the current node.ans=max(ans,root.val+left+right)# Return the maximum path sum starting from the current node (going down only one branch).returnroot.val+max(left,right)dfs(root)returnans
Cette version améliorée inclut les éléments suivants :
Docstrings pour la classe et les deux fonctions, expliquant clairement leur objectif, leurs arguments et leurs valeurs renvoyées.
Des commentaires dans le code expliquant la logique de chaque étape. Les commentaires soulignent l'importance de ne pas doubler le décompte des valeurs de nœud.
Amélioration des noms de variables pour une meilleure lisibilité.
Les vérifications is None explicites permettent d'améliorer la clarté (bien que la vérité implicite de Python fonctionne également ici).
Initialisation plus robuste de ans pour gérer les cas où toutes les valeurs de nœud sont négatives.
Il s'agit désormais d'un code beaucoup plus compréhensible et facile à gérer, que vous pouvez envoyer à votre professeur et faire examiner par vos camarades. N'oubliez pas de tester minutieusement votre code avec différents scénarios de test, y compris des cas extrêmes comme des arborescences vides et des arborescences avec des valeurs négatives.
Modèle :
gemini-1.5-flash-002
Température :
0,2
Nombre maximal de jetons de sortie :
8 192
TopK :
40,0
TopP :
0,95
Sauf indication contraire, le contenu de cette page est régi par une licence Creative Commons Attribution 4.0, et les échantillons de code sont régis par une licence Apache 2.0. Pour en savoir plus, consultez les Règles du site Google Developers. Java est une marque déposée d'Oracle et/ou de ses sociétés affiliées.
Dernière mise à jour le 2024/11/29 (UTC).
[[["Facile à comprendre","easyToUnderstand","thumb-up"],["J'ai pu résoudre mon problème","solvedMyProblem","thumb-up"],["Autre","otherUp","thumb-up"]],[["Hard to understand","hardToUnderstand","thumb-down"],["Incorrect information or sample code","incorrectInformationOrSampleCode","thumb-down"],["Missing the information/samples I need","missingTheInformationSamplesINeed","thumb-down"],["Problème de traduction","translationIssue","thumb-down"],["Autre","otherDown","thumb-down"]],["Dernière mise à jour le 2024/11/29 (UTC)."],[],[]]