我不知道没有递归的算法。我想无论如何都要分享我的站点地图视图助手:
def tree_from_set(set, &node_text)
buf = '<ul>'
siblings = set.select{|n| n.parent_id == set[0].parent_id}
siblings.each do |node|
children = set.select{|n| n.lft > node.lft and n.rgt < node.rgt }
buf << '<li>'
if children.blank?
buf << yield(node)
else
buf << yield(node)
buf << tree_from_set(children, &node_text)
end
buf << '</li>'
end
buf << '</ul>'
end