Существует еще один широко известный способ создания двоичного дерева из общего дерева без "узлов связи".Этот метод лучше всего понять следующим образом:
Node{ Node{
data; data;
first_child; => left;
next_sibling; right;
} }
Это в основном представляет список дочерних элементов общего дерева в виде связанного списка, с добавлением каждого узла, имеющего ссылку на связанный список его дочерних элементов.,Как видите, это структурно эквивалентно двоичному дереву.
Итак, в псевдокоде (с пропущенными краями для простоты)
BinaryTree(gtree){
root=BinaryNode(gtree.data,BinaryNode(gtree.children),null);
}
BinaryNode(List<gnode> sibs){
BinaryNode(sibs.first.data,BinaryNode(sibs.first.children),BinaryTree(sibs.rest));
}
BinaryNode(data,left,right){
data=data;
left=left;
right=right;
}
Конечно, если вам нужно иметь структуру, которую вы описали, это будет бесполезно, но в целом это довольно хороший способ создания двоичного дерева из общего дерева.