【发布时间】:2014-03-24 13:09:38
【问题描述】:
比如说,有一个树形数据结构,它的每个叶子都定义了一组用于查找的键:
*
|- A = 1, B = 2
|- *
|- C = 4
|- *
|- D = 5
|- D = 6, E = 7
我需要一种在深度优先遍历树时找到任何给定叶子的键值的方法。
我想到了两种方法:
如果在当前叶子中找不到该值,则检查其父级的字典,依此类推回到树的根。
有一个全局字典,每个叶子在被遍历时插入/删除它的键。在此全局字典中执行的查找。
很可能会有很多叶子,每个叶子都有几个键,每个键大约需要 3-4 次查找。
哪种方法更有效?或者,也许有另一种比两者都更好的方法?
【问题讨论】:
-
几个问题:为什么要深度优先?树的数量是多少(二元、三元……)?节点的键与其叶子的键之间有什么关系?从某个角度来看,您可能正在寻找B-tree。
-
@OndrejTucny,考虑一些编程语言的简单编译器。节点 = 可见范围,键 = 变量名。因此,每个节点可以有任意数量的子节点。这也解释了遍历顺序。需要的是从任何嵌套的子作用域中查找变量的最快方法。
标签: c# dictionary compiler-construction tree lookup