我正在研究树算法,几乎所有算法都使用递归进行遍历当然遍历也可以在没有递归的情况下完成(通过创建堆栈数据结构和while循环)。但出于好奇心想知道当树中存在数百万或数十亿个节点时如何遍历这些树数据结构?当然,这些问题也会在访谈中提出。
我能想到的一些方法是
任何更好的方法,如果任何人可以分享与此类问题的学习材料的链接将是有帮助的。
答案 0 :(得分:0)
如果树适合记忆,你可以走它。我构建了用数百万节点构建AST的工具(来自大量树木,有时来自非常深的树木);我们将树存储在记忆中。递归步行很好。并且,如果正确完成,每个节点只需要几十纳秒(缓存线未命中时间),这样做。
固定大小的堆栈通常会将其搞砸,因为这样的堆栈可以防止任意深度递归。请参阅How does a stackless language work?我编码树操作的语言不具有固定大小的堆栈。
您可以将分布在机器上的树或(更糟!)存储在数据库中。您仍然可以遍历那棵树,但算法很笨拙,而且通信(远程机器,数据库表)的额外延迟使得这种操作变得非常缓慢,几乎没有人这样做。