Wenn Sie Whiteboard-Codierung, ein Interview oder sogar nur die Planung zur Verwendung eines Baums durchführen, ist die Wortlast hier ein wenig zu viel.
Es sollte weiter gesagt werden, dass der Grund, warum ein Baum nicht wie z.B. ein Pair
(über den dasselbe gesagt werden könnte) enthalten ist, darin besteht, dass Sie Ihre Daten in der Klasse, die sie verwendet, kapseln sollten, und die einfachste Implementierung so aussieht:
/***
/* Innerhalb der Klasse, die aus irgendeinem Grund einen Binärbaum verwendet. Sie könnten
/* mit Generika verallgemeinern, wenn die Elternklasse unterschiedliche Wertetypen benötigt.
*/
private class Node {
public String value;
public Node[] nodes; // Oder ein Iterable nodes;
}
Das war es schon für einen Baum mit beliebiger Breite.
Wenn Sie einen Binärbaum möchten, ist es oft einfacher, mit benannten Feldern zu verwenden:
private class Node { // Mit Paketsichtbarkeit ist eine Option
String value;
Node left;
Node right;
}
Oder wenn Sie einen Trie möchten:
private class Node {
String value;
Map nodes;
}
Jetzt haben Sie gesagt, dass Sie
in der Lage sein möchten, alle Kinder (irgendeine Art von Liste oder Array von Strings) zu erhalten, die einen Eingabestring, der einen bestimmten Knoten darstellt, repräsentieren
Das klingt nach Hausaufgabe.
Aber da ich ziemlich sicher bin, dass jeder Termin jetzt abgelaufen ist…
import java.util.Arrays;
import java.util.ArrayList;
import java.util.List;
public class kidsOfMatchTheseDays {
static private class Node {
String value;
Node[] nodes;
}
// Pre-Order; du hast es nicht spezifiziert.
static public List list(Node node, String find) {
return list(node, find, new ArrayList(), false);
}
static private ArrayList list(
Node node,
String find,
ArrayList list,
boolean add) {
if (node == null) {
return list;
}
if (node.value.equals(find)) {
add = true;
}
if (add) {
list.add(node.value);
}
if (node.nodes != null) {
for (Node child: node.nodes) {
list(child, find, list, add);
}
}
return list;
}
public static final void main(String... args) {
// Normalerweise muss man nie Setup wie dieses machen, also entschuldigen Sie den Stil
// Und es könnte sauberer sein, indem man einen Konstruktor hinzufügt, wie z.B.:
// Node(String val, Node... children) {
// value = val;
// nodes = children;
// }
Node tree = new Node();
tree.value = "root";
Node[] n = {new Node(), new Node()};
tree.nodes = n;
tree.nodes[0].value = "leftish";
tree.nodes[1].value = "rightish-leafy";
Node[] nn = {new Node()};
tree.nodes[0].nodes = nn;
tree.nodes[0].nodes[0].value = "off-leftish-leaf";
// Genug Setup
System.out.println(Arrays.toString(list(tree, args[0]).toArray()));
}
}
Dies ermöglicht Ihnen die Verwendung wie:
$ java kidsOfMatchTheseDays leftish
[leftish, off-leftish-leaf]
$ java kidsOfMatchTheseDays root
[root, leftish, off-leftish-leaf, rightish-leafy]
$ java kidsOfMatchTheseDays rightish-leafy
[rightish-leafy]
$ java kidsOfMatchTheseDays a
[]