【发布时间】:2014-10-20 04:23:40
【问题描述】:
我被要求比较两棵树。如下所示:
case class Node(elem:String, child:List[Node])
为了比较树的每个元素,我有以下功能:
def compare(n1:Node, n2:Node): Boolean {
if(n1.elem == n2.elem){
return compare(n1.child, n2.child)
}
}
def compare(c1:List[Node], c2:List[Node]): Boolean {
while (c1.notEmpty) {
//filter, map etc call function above to compare the element recursively
}
}
基本上算法是针对 n1 中的每个元素,我们正在检查 n2 中的匹配。有人告诉我,这是非常必要的方式,而不是功能性的方式。什么是实现这种行为的实用方法。换句话说,我们如何在比较孩子列表时删除while循环?
【问题讨论】:
-
您是否需要将第一个列表中的每个元素与第二个列表中的每个元素进行比较?或者只是两个第一个元素,两个第二个元素等等?
-
是的,我想比较两个无序的子节点以查看天气一个列表包含与另一个列表完全相同的元素,一直到叶节点。
标签: scala functional-programming tail-recursion imperative-programming