やってみました。希望通りかどうか保証できませんが、
<!--{strip}-->
<div id="accordion_menu">
<!--{section name=cat loop=$arrTree}-->
<!--{* 直前のレベル *}-->
<!--{if $smarty.section.cat.first}-->
<!--{assign var=beforeLevel value=0}-->
<!--{else}-->
<!--{assign var=beforeLevel value=`$arrTree[$smarty.section.cat.index_prev].level`}-->
<!--{/if}-->
<!--{* 直後のレベル *}-->
<!--{if $smarty.section.cat.last}-->
<!--{assign var=afterLevel value=0}-->
<!--{else}-->
<!--{assign var=afterLevel value=`$arrTree[$smarty.section.cat.index_next].level`}-->
<!--{/if}-->
<!--{* 自分のレベル *}-->
<!--{assign var=selfLevel value=`$arrTree[cat].level`}-->
<!--{* 2階層以降 *}-->
<!--{if $beforeLevel == $selfLevel}-->
</li>
<!--{/if}-->
<!--{* 直前が子の最後 *}-->
<!--{if $beforeLevel > $selfLevel}-->
<!--{assign var=levelDiff value=`$beforeLevel-$selfLevel`}-->
<!--{section name=d loop=$levelDiff}-->
</li>
</ul>
</div>
<!--{/section}-->
<!--{/if}-->
<!--{* 1階層 *}-->
<!--{if $selfLevel == 1}-->
<!--{* 2番目以降の1階層 *}-->
<!--{if $beforeLevel != 0}-->
</div>
<!--{/if}-->
<div class="ac_top">
<!--{/if}-->
<!--{* 2階層以降 *}-->
<!--{if $selfLevel != 1}-->
<li>
<!--{/if}-->
<!--{* 自身が親である階層 *}-->
<!--{if $selfLevel < $afterLevel}-->
<div class="expandable"><span class="accordprefix"></span></div><p class="ex_title"><a href="<!--{$smarty.const.ROOT_URLPATH}-->products/list.php?category_id=<!--{$arrTree[cat].category_id|u}-->"<!--{if in_array($arrTree[cat].category_id|u, $tpl_category_id)}--> class="onlink"<!--{/if}-->><!--{$arrTree[cat].category_name|h}--></a></p>
<div class="categoryitems">
<ul>
<!--{else}-->
<a href="<!--{$smarty.const.ROOT_URLPATH}-->products/list.php?category_id=<!--{$arrTree[cat].category_id|u}-->"><!--{$arrTree[cat].category_name|h}--></a>
<!--{/if}-->
<!--{* 自身が最後 *}-->
<!--{if $afterLevel == 0}-->
<!--{assign var=levelDiff value=`$selfLevel-1`}-->
<!--{section name=d loop=$levelDiff}-->
</li>
</ul>
</div>
<!--{/section}-->
</div>
<!--{/if}-->
<!--{/section}-->
</div>
<!--{/strip}-->