Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Membina Struktur Pokok Hierarki daripada Senarai Rentetan Laluan?

Bagaimana untuk Membina Struktur Pokok Hierarki daripada Senarai Rentetan Laluan?

Barbara Streisand
Barbara Streisandasal
2024-10-31 00:15:29830semak imbas

How to Build a Hierarchical Tree Structure from a List of Path Strings?

Menukarkan Struktur Laluan menjadi Pokok

Membangun struktur data bersarang daripada koleksi rentetan laluan boleh menimbulkan cabaran, terutamanya apabila berurusan dengan petunjuk dan rekursi. Mari kita siasat penyelesaian untuk mencipta pepohon hierarki daripada tatasusunan struktur laluan.

Pertimbangkan contoh berikut:

s:=[]string {
  "a/b/c",
  "a/b/g",
  "a/d"
}

Matlamat kami adalah untuk membina pepohon yang menyerupai struktur JSON berikut:

{
 "name": "a",
 "children": [
     {
      "name": "b",
      "children": [
        {
         "name": "c",
         "children": []
        },
        {
         "name": "g",
         "children": []
        }
      ]
    },
    {
     "name": "d",
     "children": []
    }
  ]
}

Untuk mencapai matlamat ini, kami melaksanakan fungsi rekursif yang dipanggil AddToTree yang mengambil pepohon sedia ada dan senarai segmen laluan.

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
}

Fungsi ini merentasi pepohon sedia ada untuk menentukan sama ada nod yang ditentukan sudah wujud. Jika ia berlaku, ia meneruskan ke segmen laluan seterusnya. Jika tidak, ia mencipta nod baharu dengan nama yang ditentukan dan menambahkannya pada pepohon sedia ada.

Example output (note that I used omitempty on the children field, because I don't like null entries in my JSONs):

[{
    "name": "a",
    "children": [{
        "name": "b",
        "children": [{
            "name": "c"
        }, {
            "name": "g"
        }]
    }, {
        "name": "d"
    }]
}]

Penyelesaian kami berbeza daripada pendekatan asal dalam aspek utama berikut:

  • Ia beroperasi pada senarai nod dan bukannya anak nod tunggal.
  • Ia mencipta nod baharu dan bukannya menggunakan semula nod sedia ada, menghalang pertindihan.
  • Ia menyemak nod sedia ada dalam pepohon, memastikan setiap nod ditambah sekali sahaja.

Atas ialah kandungan terperinci Bagaimana untuk Membina Struktur Pokok Hierarki daripada Senarai Rentetan Laluan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn