blog mail me! feed

莫非树状结构回复只能通过递归实现?

很早前的众多论坛都是树状的, 比如古老的DS, 老旧的新浪论坛,
到现在树状结构更多的被用于评论的再评论/回复中, 比如slashdot, digg.

以前一直没想明白树状到底是怎么展开的,
我的脑子里大概就两种方法:

  1. 每个reply都赋予同样的root_id, 但可能有不同的father_id. 读取所有特定root_id的reply, 再依照father_id来建立树状结构. 好处是可以一次性的从数据库中取出结果, 坏处是树状结构复杂时, 对树状结构的重建需要消耗不少时间. 当然, 一个好的缓存结构可以避免对已经重建的结构多次重建.
  2. 仅保留father_id, father_id=0的可以认为是主贴, 压入栈中, 然后再根据reply_id递归逐级展开帖子. 好处是逻辑和实现非常简单, 坏处是数次的数据库查询, 有连接池时固然可以减少一定的数据库负担, 但大量频繁的数据对数据库还是考验.

无论哪种看来, 树状结构和平板结构比起来, 为了更多的逻辑归属和指向性, 要付出更多的资源消耗.
除非, 还有更好的算法?