Если вы спрашиваете про отрисовку в html, то вам поможет ng-include с шаблоном. Шаблон одного пункта можно хранить прямо в вашем view в скрипте.
<script type="text/ng-template" id="category.html">
код элемента
</script>
В нужном месте (где будет само дерево) пишем:
<ul>
<li ng:repeat="category in categories" ng:include="'category.html'"></li>
</ul>
categories - наш основной массив с деревом.
"'category.html'" - кавычек должно быть двое, чтобы вернуть строку.
Внутри кода элемента (в шаблоне, то есть) надо будет соответственно написать:
ID: {{category.id}},
NAME: {{category.name}}
<ul ng:if="category.children">
<li ng:repeat="category in $parent.category.children" ng:include="'category.html'"></li>
<!-- $parent нужен из-за ng-if -->
</ul>
По поводу структуры все понятно - к каждому элементу добавляется массиив с дочерними (children) элементами. При клике на элемент будет идти загрузка, данные добавятся в изначальный массив, он обновится, соответственно обновится и html-дерево. Если, конечно, вы будете подгружать данные нативными методами, запускающими перерисовку, или используете ($scope.$apply(fn))
Я в своих проектах делал именно так (правда, без подзагрузки пунктов - деревья были не более 30 элементов). Если есть способ лучше - буду рад о нем узнать.