我有使用地圖樹狀結構:計數層狀結構
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