Bagaimana untuk Membina Struktur Pokok Hierarki daripada Senarai Rentetan Laluan?

Barbara Streisand
Lepaskan: 2024-10-31 00:15:29
asal
845 orang telah melayarinya

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"
}
Salin selepas log masuk

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": []
    }
  ]
}
Salin selepas log masuk

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
}
Salin selepas log masuk

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"
    }]
}]
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!