0
Предположим, что мы определили дерево целых чисел:Вычислить сумму значений в дереве
type inttree = Int of int | Node of inttree * inttree ;;
есть ли возможный способ найти сумму элементов этого дерева?
Предположим, что мы определили дерево целых чисел:Вычислить сумму значений в дереве
type inttree = Int of int | Node of inttree * inttree ;;
есть ли возможный способ найти сумму элементов этого дерева?
Попробуйте простую рекурсивную функцию (делает глубины первый обход), как
let rec mysum t = match t with
Int x -> x
| Node (l,r) -> mysum l + mysum r
;;
Первая строка может быть let rec mysum = function
(это вопрос стиля).
Почему бы просто написать функцию, которая выполняет итерации по всем узлам с помощью DFS или что-то еще? –
Что такое DFS? Можете ли вы привести пример для этого - я просто новичок в функциональном подходе и из-за нехватки ресурсов и времени, я избегаю теории и беру подход кодирования-лота. и спасибо . – user22323
Когда вам нужно перебирать все узлы в графе (дерево также является графиком) и делать * что-то * с каждым узлом (в вашем случае вам нужно суммировать все значения узлов), [Поиск по глубине] (http : //en.wikipedia.org/wiki/Depth-first_search) или [Поиск по ширине (первый поиск) (http://en.wikipedia.org/wiki/Breadth-first_search) обычно используется. Разница заключается в порядке обхода, что не важно в вашем случае. Таким образом, самый простой способ сделать это - просто написать 4-строчную рекурсивную функцию, где вы либо читаете, либо накапливаете значение (основной случай рекурсии), либо просто выполняете другой рекурсивный вызов. –