我有使用地图树状结构:计数层状结构
val m = Map[Int, (Set[Int], Set[Int])]()
其中节点ID是通过ID和各组代表分别为节点的家长和孩子。我试图递归计算节点上下的层数。例如,我得到了像(0 - 1 - 2 - (3,4))这样的树,我期待有一些函数返回结果作为集合列表,其中每个集合都是树的图层。我有以下的方法,通过它我正在收集所有的父母
def p(n:Set[Int]):Set[Int] = if(n.isEmpty) Set.empty else n ++ m(n.head)._1 ++ p(n.tail)
,但我想它通过相应的树的级别进行分组,这样我可以通过它调用尺寸得到期望的结果。
UPD:
m = Map(0 -> (Set(), Set(1), 1 -> (Set(0), Set(2,3)), 2 -> (Set(1), Set(4,5), 3 -> (Set(2), Set(6,7) ....)
这是怎么了我的地图M可以看起来像树节点填满后,我想从它的另一个地图这可能看起来像:
Map(0 -> (List(Set()), List(Set(1), Set(2,3), Set(4,5,6,7)), 1 -> (List(Set(), Set(0)), List(Set(2,3), Set(4,5,6,7)) ... and so on)
那是我想要按照每个级别将所有父级图层设置为集合,并将所有子级图层设置为集合。
下面是简化的例子:
val m = Map(2 -> (Set(1),Set(3, 4)), 4 -> (Set(2),Set()), 1 -> (Set(0),Set(2)), 3 -> (Set(2),Set()), 0 -> (Set(),Set(1)))
这里是以下结构的树0 - 1 - 2 - 3,4
所以这里0是它有子一个根这在转到有2个孩子3和4的孩子2.在更复杂的情况下,节点可能有多个父母,但所有人都是独特的,这就是为什么我选择了集合,尽管它可以是其他任何东西,但是通过集合,我可以轻松地向上收集所有父节点和所有的孩子向下,我唯一想让他们按居住的层次分组。在这种情况下,节点3应该具有列表(Set(2),Set(1),Set(0),Set())作为其父节点。
你能否使这个例子更具体通过提供M'的'文字规范,然后你期望输出是什么? – dhg
当然,我更新了我的问题。 – Dmitrii
谢谢。虚空的例子实际上编译,然而(我认为括号是不匹配的)。此外,它指定2和3是1的孩子,但是2是3的父亲,那么它应该是怎么样的?此外,是否有一个原因,父母被表示为一组?一个节点可以有多个父节点吗? – dhg