【发布时间】:2012-10-12 23:07:27
【问题描述】:
我正在实现一个基于 c# 的树数据结构(主要基于 Dan Vanderboom's Generic implementation)。我现在正在考虑处理 Dan 没有实现的 Count 属性的方法。
显而易见且简单的方法是使用递归调用,它可以愉快地遍历树并添加节点(或者如果您愿意,可以使用 Queue 迭代遍历树并计算节点)。只是看起来很贵。 (我也可能想延迟加载我的一些节点)。
我可以在根节点上维护一个计数。所有子节点都将遍历和/或持有对根的引用,并在更改时更新内部可设置的计数属性。这会将迭代问题推到我想要中断分支或清除给定节点下的所有子节点的时候。通常更便宜,并且将繁重的工作放在我认为不常被调用的函数中。
似乎有点蛮力,这通常意味着我还没有想到的异常情况,或者如果您愿意,还有错误。
有没有人有一个实现的例子,它保持一个不平衡和/或非二叉树结构的计数,而不是即时计数?不用担心延迟加载,我相信我可以调整示例以满足我的特定需求。
【问题讨论】:
-
为什么不使用静态变量并根据需要递增/递减?
-
静态变量将应用于我的树结构的所有实例。
-
是的(我的想法太多了)。那为什么不是实例变量呢?
-
为什么递归调用看起来很昂贵?在我看来,这是看待它的自然方式。
-
@Stanley 谢谢你的意见。我同意有人可以争辩说递归是一种可接受的路径。我只是认为递归会带来一些风险,即使非常小且不太可能。
标签: c# .net data-structures tree