Двоичное дерево может быть закодировано с использованием двух функций l
и r
, так что для node n
, l(n)
дает левый дочерний элемент n
, r(n)
дает правый дочерний элемент n
.
Ветвь дерева - это путь от корня к листу, длина ветви до конкретного листа - это количество дуг на пути от корня к этому листу.
Пусть MinBranch(l,r,x)
будет простым рекурсивным алгоритмом для взятия двоичного дерева, закодированного функциями l и r, вместе с корневым узлом x для двоичного дерева, и возвращает длину кратчайшей ветви двоичного дерева.
Приведите псевдокод этого алгоритма.
Хорошо, в основном это то, что я придумал до сих пор:
MinBranch(l, r, x)
{
if x is None return 0
left_one = MinBranch(l, r, l(x))
right_one = MinBranch(l, r, r(x))
return {min (left_one),(right_one)}
}
Очевидно, это не очень хорошо и не идеально. Я был бы очень рад, если бы люди помогли мне довести это до совершенства и заработать - любая помощь будет оценена по достоинству.