我有一個問題,列表[(節點ID,的parentID)] - >樹結構如何隱蔽清單樹沒有堆棧溢出
val tree: List[(Int, Int)] = List((1,0),(2,0),(3,0),(4,1),(5,4),(6,2),(7,6))
我的樹案例類
case class Tree(value: Int, subTree: List[Tree])
我代碼
def DFS(tree: List[(Int, Int)], id: Int): List[Tree] = {
if(tree.isEmpty) Nil
else List(Tree(id, tree.filter(x => x._2 == id).flatMap(x => DFS(tree, x._1))))}
結果
List(Tree(0,List(Tree(1,List(Tree(4,List(Tree(5,List()))))), Tree(2,List(Tree(6,List(Tree(7,List()))))), Tree(3,List()))))
,我發現在名單
大數據堆棧溢出,所以我想將其更改爲尾遞歸,映射或摺疊
確保你的遞歸代碼是尾遞歸否則會導致大堆棧溢出輸入 –
更改爲tail-recursive call pls,我不知道該怎麼做 –
Tree的'value'屬性是'ID',對吧? –