のうち、構造のようなツリーを取得します。このようなデータ構造で、私は2日以来立ち往生していたパス文字列
s:=[]string {
"a/b/c",
"a/b/g",
"a/d",
}
::私は構造物のようなパスの配列を持っている、と言うことができます
{
"name": "a",
"children": [
{
"name": "b",
"children": [
{
"name": "c",
"children": []
},
{
"name": "g",
"children": []
}
]
},
{
"name": "d",
"children": []
}
]
}
:私はこのようなもので終わるしたい
type Node struct {
Name string `json:"name"`
Children []Node `json:"children"`
}
私はできるだけ早く私は行方不明のノードに(「G」を追加する必要があります何かを実装しようとして、種類の正常に動作再帰、でそれを構築しようとしましたが、唯一の1つの文字列(例:「/ B/C」)について"a/b/g")を私が立ち往生している木に。
私のようなものだった:
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
}
}
を誰かが効率的なソリューションに私を指すもらえますか?お使いのバージョンから
[{
"name": "a",
"children": [{
"name": "b",
"children": [{
"name": "c"
}, {
"name": "g"
}]
}, {
"name": "d"
}]
}]
顕著な違い:
[Trie](https:// ja) wikipedia.org/wiki/Trie)や[Radix Tree](https://en.wikipedia.org/wiki/Radix_tree)の挿入アルゴリズムを使用して、あなたが望むものを実装する方法を知ることができます。 – mkopriva
あなたは問題はないが解決策を改善したい場合はcodereview.stackexchangeに同様の質問を投稿することができます –
実際にコードは実際には機能しませんが、私はあなたの提案を試みます – hanneslehmann