Высота дерева - это длина самого длинного пути к конечному узлу в любом из его дочерних элементов.
Википедия говорит: высота пустого дерева равна -1 . Я не согласен. Пустое дерево - это буквально просто дерево, содержащее один конечный узел (нулевое или специальное значение, представляющее пустое дерево). Поскольку у узла нет дочерних элементов, длина его самого длинного пути должна быть пустой суммой = 0, а не -1.
Аналогично, непустое дерево имеет двух дочерних элементов, поэтому по определению существует не менее путь> = 1 к конечному узлу.
Мы можем определить наше дерево следующим образом:
type 'a tree =
| Node of 'a tree * 'a * 'a tree
| Nil
let rec height = function
| Node(left, x, right) -> 1 + max (height left) (height right)
| Nil -> 0