Why the first approach doesn't work for you? Unless you intend to perform atomic update on the whole array, it is the way to go. I compiled the following code successfully:
struct node
{
unsigned long key;
tbb::atomic<struct node*> childrenArray[2];
};
void main() {
node n;
n.childrenArray[0].compare_and_swap(0,0);
}