1
5
很不错。我们可以做得更好一点。
这是一个合理的解决办法。它很容易阅读,也很容易纠正。正如我前面提到的,如果树非常深,那么性能可能不好。 我会这样做:
请注意,只有当您关心迭代“按顺序”进行时,才需要调用Reverse()。例如,假设操作alpha有子操作beta、gamma和delta,delta有子操作zeta和omega。遍历过程如下:
现在堆栈是空的,所以我们已经完成了,我们按照“预排序遍历”的顺序获取项目。如果你不关心顺序,如果你所需要的只是确保你得到了所有的顺序,那么不要费心去颠倒孩子们的顺序,你会得到他们的顺序α,δ,ω,zeta,gamma,beta。 有道理? |
2
1
使用标准的查询操作符,Linq通常不擅长递归。您可以编写上述更通用的形式,但是您将找不到一种执行这种遍历的标准Linq方法。 |
3
1
我认为您的实现是好的。但是,如果您想要使用LINQ(并使其稍微短一点,但不是显著短一点),那么您可以实现
对于每个操作,我们生成一个序列,其中包含当前操作的项,然后是所有递归生成的项。通过使用嵌套
我认为,通过使用一个支持“将元素附加到前面”操作的函数(不可变)列表,可以使它更好一点,这正是我们在嵌套中所做的
正如jon所提到的,使用查询编写递归方面没有好的方法(您可以使用lambda函数而不是方法编写递归查询——但这并不是更好的方法)。 |
Julia · 矢量中相加为总和S的值的数量 1 年前 |
apetrai · 我应该如何假设算法使用哪种迭代器类别? 2 年前 |
Pratik · 不使用Java DeepCopy迭代器 6 年前 |
PanDe · 将两个列表合并为一个Dict、Tuple 6 年前 |
bisarch · 迭代哈希集并在每次迭代中删除多个元素 6 年前 |