從路徑字串建立樹狀結構
將字串路徑陣列轉換為樹狀結構可能具有挑戰性,尤其是在處理具有遞歸資料。這是解決該問題的有效方法:
給定的路徑數組由表示樹中節點路徑的字串組成。所需的輸出是具有節點及其子節點的分層樹結構。
首先,讓我們檢查提供的程式碼:
<code class="go">func appendChild(root Node, children []string) Node { if len(children) == 1 { return Node{children[0], nil} } else { t := root t.Name=children[0] t.Children = append(t.Children, appendChild(root, children[1:])) return t } }</code>
此程式碼嘗試遞歸建立樹,nhưng 它有一些問題:
為了解決這些問題,這裡有一個修改後的程式碼範例:
<code class="go">func AddToTree(root []Node, names []string) []Node { if len(names) > 0 { var i int for i = 0; i < len(root); i++ { if root[i].Name == names[0] { //already in tree break } } if i == len(root) { root = append(root, Node{Name: names[0]}) } root[i].Children = AddToTree(root[i].Children, names[1:]) } return root }</code>
此程式碼對節點清單進行操作,而不是單一節點的子節點。它在插入節點之前檢查節點是否已存在,並建立新節點而不是重複使用輸入節點。此外,它還可以根據需要透過附加到根節點列表來處理給定路徑不從同一根節點開始的情況。
範例輸出:
[{ "name": "a", "children": [{ "name": "b", "children": [{ "name": "c" }, { "name": "g" }] }, { "name": "d" }] }]
這改善了解決方案提供了從路徑字串到分層樹結構的高效且準確的轉換。
以上是如何有效地將路徑字串清單轉換為樹狀結構?的詳細內容。更多資訊請關注PHP中文網其他相關文章!