2013-09-15 8 views
0

Предположим, что мы определили дерево целых чисел:Вычислить сумму значений в дереве

type inttree = Int of int | Node of inttree * inttree ;; 

есть ли возможный способ найти сумму элементов этого дерева?

+1

Почему бы просто написать функцию, которая выполняет итерации по всем узлам с помощью DFS или что-то еще? –

+0

Что такое DFS? Можете ли вы привести пример для этого - я просто новичок в функциональном подходе и из-за нехватки ресурсов и времени, я избегаю теории и беру подход кодирования-лота. и спасибо . – user22323

+2

Когда вам нужно перебирать все узлы в графе (дерево также является графиком) и делать * что-то * с каждым узлом (в вашем случае вам нужно суммировать все значения узлов), [Поиск по глубине] (http : //en.wikipedia.org/wiki/Depth-first_search) или [Поиск по ширине (первый поиск) (http://en.wikipedia.org/wiki/Breadth-first_search) обычно используется. Разница заключается в порядке обхода, что не важно в вашем случае. Таким образом, самый простой способ сделать это - просто написать 4-строчную рекурсивную функцию, где вы либо читаете, либо накапливаете значение (основной случай рекурсии), либо просто выполняете другой рекурсивный вызов. –

ответ

1

Попробуйте простую рекурсивную функцию (делает глубины первый обход), как

let rec mysum t = match t with 
     Int x -> x 
    | Node (l,r) -> mysum l + mysum r 
;; 

Первая строка может быть let rec mysum = function (это вопрос стиля).

Смежные вопросы