Если ваше «очень простое» двоичное дерево не сбалансировано, то рекурсивная опция страшна из-за глубины неограниченной рекурсии. Итеративные обходы имеют ту же проблему времени, но, по крайней мере, стек / очередь находятся под вашим контролем, поэтому вам не нужно аварийно завершать работу. Фактически, с флагами и дополнительным указателем на каждом узле и эксклюзивным доступом, вы можете выполнять итерацию по своему дереву без какого-либо стека / очереди вообще.
Другой вариант - для каждого узла сохранять размер поддерева ниже него. Это означает, что всякий раз, когда вы добавляете или удаляете что-то, вы должны отслеживать весь путь до корня, обновляя все размеры. Итак, еще раз, если дерево не сбалансировано, это здоровенная операция.
Если дерево сбалансировано, тогда оно не очень глубокое. Все параметры защищены от сбоев, а производительность оценивается по измерениям :-) Но на основе структуры вашего узла дерева, либо она не сбалансирована, либо вы играете в глупые игры с флагами в младших битах указателей ...
Возможно, нет особого смысла быть очень умным с этим. Для многих практических применений двоичного дерева (в частности, если оно представляет собой двоичное дерево search ), вы скорее понимаете, что хотите, чтобы оно было сбалансировано. Поэтому сохраните свою энергию, когда достигнете этой точки: -)