Un noeud est appelé beau si sa valeur est supérieure à la valeur de tout autre noeud, qui peut être trouvé sur le chemin de la racine. Le problème est de compter les beaux nœuds sur un arbre donné.Fonction bizarre sur les arbres Ocaml
Voici une solution au problème, mais je ne peux pas comprendre l'idée derrière avoir un accumulateur de fonctions.
Quelqu'un pourrait-il expliquer cette solution?
open List;;
type 'a tree = Node of 'a * 'a tree list
let rec fold_tree f (Node (x,l)) =f x (map (fold_tree f) l);;
let beautiful_nodes t =
let merge x l k =
if x <k then
fold_left (fun a h ->a + h k) 0 l
else
fold_left (fun a h ->a + h x) 0 l + 1
in
fold_tree merge t (-1);;
ce n'est pas votre code? N'hésitez pas à demander à quiconque l'a écrit si ce n'est pas le cas. –
Non ce n'est pas mon code. – guser
Le code que vous donnez ne compile pas pour moi. J'obtiens l'erreur: 'Cette expression a le type int mais une expression était attendue de type (int list -> int) list tree 'associé à l'expression finale' (-1) '. –