Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimanakah Anda Boleh Menukar Senarai Rentetan Laluan dengan Cekap kepada Struktur Seperti Pokok?

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

Susan Sarandon
Susan Sarandonasal
2024-10-29 02:00:02309semak imbas

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>

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>

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"
    }]
}]

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!

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