Bagaimanakah Anda Boleh Menukar Senarai Rentetan Laluan dengan Cekap kepada Struktur Seperti Pokok?

Susan Sarandon
Lepaskan: 2024-10-29 02:00:02
asal
308 orang telah melayarinya

How Can You Efficiently Convert a List of Path Strings into a Tree-like Structure?

Mencipta Struktur Seperti Pokok daripada Rentetan Laluan

Menukar tatasusunan laluan rentetan kepada struktur seperti pokok boleh menjadi mencabar, terutamanya apabila berurusan dengan data rekursif. Berikut ialah penyelesaian yang cekap untuk masalah:

Susun atur laluan yang diberikan terdiri daripada rentetan yang mewakili laluan ke nod dalam pokok. Output yang diingini ialah struktur pepohon hierarki dengan nod dan anak-anaknya.

Mula-mula, mari kita periksa kod yang disediakan:

<code class="go">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
   }
}</code>
Salin selepas log masuk

Kod ini cuba mencipta pepohon secara rekursif, nhưng ia mempunyai beberapa isu:

  • Ia menganggap bahawa nod input sentiasa nod akar.
  • Ia tidak menyemak sama ada nod sudah wujud sebelum mencipta pendua.
  • Ia mengemas kini nod input, membawa kepada struktur pepohon yang salah.

Untuk menangani isu ini, berikut ialah contoh kod yang disemak semula:

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

Kod ini beroperasi pada senarai nod, bukannya anak-anak satu nod. Ia menyemak sama ada nod sudah wujud sebelum memasukkannya dan mencipta nod baharu dan bukannya menggunakan semula nod input. Selain itu, ia mengendalikan kes di mana laluan yang diberikan tidak bermula pada nod akar yang sama dengan menambahkan senarai nod akar jika perlu.

Contoh output:

[{
    "name": "a",
    "children": [{
        "name": "b",
        "children": [{
            "name": "c"
        }, {
            "name": "g"
        }]
    }, {
        "name": "d"
    }]
}]
Salin selepas log masuk

Ini dipertingkatkan penyelesaian menyediakan penukaran yang cekap dan tepat daripada rentetan laluan kepada struktur pokok hierarki.

Atas ialah kandungan terperinci Bagaimanakah Anda Boleh Menukar Senarai Rentetan Laluan dengan Cekap kepada Struktur Seperti Pokok?. 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!