將路徑字串轉換為分層樹結構
當呈現一組類似路徑的結構時,可以建構對應的分層樹狀結構這是一項具有挑戰性的任務,尤其是在指標操作和遞歸方面存在限制的情況下。為了解決這個問題,一個有效的解決方案是利用一種方法,在搜尋現有節點的同時迭代地將節點新增到樹中。
解決方案
建議的解決方案採用遞歸名為 AddToTree 的函數,它採用節點列表(根)和要添加的路徑組件列表(名稱)。它遍歷根節點,檢查名稱的第一個元件 (names[0]) 是否已作為子節點存在。如果不存在,則將名稱為 name[0] 的新節點附加到根。
接下來,函數在與 name[0] 匹配的節點的子節點上遞歸呼叫 AddToTree。這個過程一直持續到名稱的所有組成部分都被處理完畢,從而產生一個完全建構的樹狀結構。
程式碼範例
以下是AddToTree 函數的Go 實作:
<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中文網其他相關文章!