Du kannst - genauso wie auf CPU-Seite - die Baum-Struktur in einem Array speichern. Allerdings sind eigene Datentypen eher langsamer als die Standarddatentypen, von daher solltest Du überlegen, ob Du deine Baumdaten nicht in einer vec4 oder ähnliches kodieren kannst. Die Speicherzugriffe auf den Baum wirst Du nur suboptimal hinbekommen, da Du "zufällig" durch den Speicher läufst.
Auf der GPU kannst Du mit OpenCL dein Array über Pointer ansprechen und den Baum "normal" verwenden. Wenn Du die Daten aber lokal eingrenzen kannst, könntest Du die Zugriffe optimieren.
Das gleiche funktioniert auch mit GLSL, dort kodierst Du dein Array in 1- oder 2-dimenionales Bild. Das 1D-Bild wurde extra für solche Einsatzzwecke gemacht, aber ich weiß nicht, ab welcher GL-Version (3.1?) es verfügbar ist. Zumindest rechnest Du dann deinen Index in Texturkoordinaten um.
HLSL und Cg habe ich noch nie für Berechnungen oder ähnliches missbraucht, aber da sollte es ähnlich gehen.
Kleine Warnung: Mit OpenCL kann optimieren deutlich anstrengender sein, die Grafiksprachen verstecken einige Eigenheiten...