Ich muss einen Binärbaum für eine Liste von Listen übergeben, weiß aber nicht weiter. Irgendein Vorschlag?Wie übergebe ich einen Binärbaum für eine Liste von Listen in OCaml?
Antwort
Der übliche Weg, um eine Baumstruktur (oder allgemeiner eine Gesamtstruktur) als Liste der Liste anzuzeigen, ist ihre "Pfaddarstellung". Sie können einen Binärbaum als Daten aller Pfade von der Wurzel bis zu den Blättern darstellen (Sie haben also so viele Pfade wie Blätter in Ihrem Baum).
Beispiel:
- links, links
- links, rechts, links
- Links, Rechts, Rechts
- Rechts:
/\ /\ / \ /\ /\ /\ /\ /\
wie die folgende Liste dargestellt werden , Links, Links
- Rechts, Links, Rechts, Links
- rechts, links, rechts, rechts
- rechts, rechts
Es gibt viele Variationen dieser Darstellung sind. Wenn zum Beispiel die Knoten Informationen übertragen, ist es einfacher, den Graphen als die Liste der Pfade zu jedem Knoten (und nicht nur zu den Blättern) darzustellen. Sie müssen diese Antwort wahrscheinlich anpassen, um Ihr spezielles Problem zu lösen.
Dies kann aufgebaut werden, indem Sie Ihren Baum in einer Tiefe-zuerst-Weise durchlaufen. Umgekehrt können Sie Ihren Baum dann rekursiv aus der Liste der Pfade rekonstruieren.
type binary_tree =
| Empty
| Node of binary_tree * binary_tree
type branch =
| Left
| Right
let rec to_paths tree =
match tree with
| Empty -> [[]]
| Node (left, right) ->
(List.map (fun l -> Left :: l) (to_paths left))
@ (List.map (fun l -> Right :: l) (to_paths right))
let rec of_paths = function
| [[]] -> Empty
| l ->
let lefts, rights = List.partition (function
| [] -> failwith "of_paths: not at binary tree"
| Left :: _ -> true
| Right :: _ -> false) l
in
Node (of_paths (List.map List.tl lefts),
of_paths (List.map List.tl rights))
(* A little test : *)
let tree =
Node (Node(Empty, Node (Empty, Empty)),
Node (Node(Empty, Node (Empty, Empty)), Empty))
let() = assert (tree = of_paths (to_paths tree))
- 1. eine Liste von Listen in OCaml
- 2. OCaml: Liste der Listen
- 3. Wie überschneide ich zwei Listen in OCaml?
- 4. So drucken Sie eine Liste von Listen in OCaml
- 5. eine Spalte von Listen in OCaml
- 6. Wie erstelle ich eine Liste von Listen?
- 7. Wie bekomme ich eine Unterliste von einer Liste in ocaml
- 8. Wie schreibe ich den Index für eine Liste von Listen
- 9. Einen Binärbaum ohne die Verwendung von Listen freisetzen
- 10. Wie kann ich eine Liste von Listen in Scala iterieren?
- 11. Wie transformiere ich einen Vektor und eine Liste von Listen in einen data.frame in R?
- 12. Wie speichere ich eine Liste von Listen in R?
- 13. Python-Liste von Python-Binärbaum
- 14. Listen mit gleichen Köpfen in einer 2D-Liste (OCaml) kombinieren
- 15. Wie sortiere ich eine Liste von Listen in R?
- 16. Wie übergebe ich einen Wert in XV6 in eine Systemaufruffunktion?
- 17. Konvertieren Sie eine Liste von Listen in einen Zeichenvektor
- 18. Konvertiere eine Liste von Tupeln in eine Liste von Listen
- 19. Wie nehme ich ein Produkt aus zwei Listen in OCaml?
- 20. Eine Liste von Listen transponieren
- 21. Konvertieren eine Liste von Listen in ein Wörterbuch von Listen
- 22. Einfügen in eine Liste von Listen prolog
- 23. Wie kopiere ich einen OCaml-Verschluss?
- 24. Wie kann ich erfolgreich eine Liste von Listen aussortieren?
- 25. Wie übergebe ich ein Java-Textfeld an eine Array-Liste?
- 26. Liste in Listen innerhalb von Listen
- 27. Wie konvertiert man folgendes in einen Binärbaum?
- 28. eine data.frame auf eine Liste von Listen
- 29. Binärbaum in Java mit verknüpfter Liste
- 30. Wie visualisiert man eine Liste von Listen von Listen von ... in R?
Es ist nicht klar, was Sie fragen. Sie müssen viel mehr Details geben. Aber du solltest auch versuchen, Code selbst zu schreiben, bevor du um Hilfe bittest, vor allem, wenn es sich um eine Schulaufgabe handelt (wie es sich anhört). –