パス文字列の階層ツリー構造への変換
パスのような構造の配列が提示された場合、対応する階層ツリー構造を構築できます。これは、特にポインター操作と再帰に制限がある、困難なタスクです。これに対処するための効率的な解決策は、既存のノードを検索しながら繰り返しノードをツリーに追加する方法を利用することです。
解決策
提案された解決策は再帰的手法を採用しています。 AddToTree という名前の関数。ノードのリスト (ルート) と追加するパス コンポーネントのリスト (名前) を受け取ります。ルート ノードを反復処理して、名前の最初のコンポーネント (names[0]) が子として既に存在するかどうかを確認します。一致しない場合は、names[0] を名前として持つ新しいノードがルートに追加されます。
次に、この関数は、names[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 中国語 Web サイトの他の関連記事を参照してください。