Зачем вам нужно покончить с глобалами? Я понимаю, что клеймо глобалов - это плохо, но иногда просто иметь глобальную структуру данных со всеми элементами - самое быстрое решение.
Вы делаете компромисс: ясность кода и меньше будущих проблем для производительности. В этом смысл «не оптимизировать пока». Поскольку вы находитесь на стадии оптимизации, иногда необходимо отказаться от читабельности и хороших методов программирования в пользу производительности. Я имею в виду, что побитовые хаки не читаются, но они быстрые.
Я не уверен, сколько у вас есть древовидных объектов, но я бы лично выбрал первый вариант. Если вы не имеете дело с тысячами + деревьев, указатели на самом деле не будут намного больше, чем несколько строк. Если память действительно очень важная проблема, попробуйте оба метода (они кажутся довольно простыми в реализации) и запустите их через профилировщик. Или используйте отличный Process Explorer .
Редактировать: одно из приложений, над которым я работаю, имеет дерево узлов, содержащее около 55 тыс. Узлов. Мы строим древовидную структуру, но также поддерживаем массив для поиска O (1). Намного лучше, чем O (m * n), которое мы получали при использовании рекурсивного метода FindNodeByID.