Вы можете определить, является ли данное двоичное дерево левым полным двоичным деревом, более известным как двоичная куча, гарантируя, что у каждого узла с правым потомком также есть левый потомок. Смотри ниже
bool IsLeftComplete(tree)
{
if (!tree.Right.IsEmpty && tree.Left.IsEmpty)
//tree has a right child but no left child, therefore is not a heap
return false;
if (tree.Right.IsEmpty && tree.Left.IsEmpty)
//no sub-trees, thus is leaf node. All leaves are complete
return true;
//this level is left complete, check levels below
return IsLeftComplete(tree.Left) && IsLeftComplete(tree.Right);
}