Немного непонятно, для чего вам это нужно. Если это учебный код, то пишите по-студенчески. В промышленном коде я бы как можно больше пользовался проверенными функциями. Массив — std::vector, дерево сортировки — std::set/std::map.
Сбалансированному упорядоченному бинарному дереву нужен ключ, по которому оно упорядочивает. Есть два варианта.
1. Ключ — что-нибудь с естественным сравнением, например, int. Тогда std::map<int, std::vector<int> >
.
2. Ключ — тот самый массив. Тогда std::set<std::vector<int> >
. (В предыдущей версии я явно писал механизм сравнения, оказывается, он уже есть и писать ничего не нужно!)