Wenn Sie Whiteboard-Codierung, ein Interview oder einfach nur die Verwendung eines Baums planen, ist die Ausführlichkeit dieser Elemente ein wenig groß.
Es sollte ferner gesagt werden, dass der Grund, warum ein Baum dort nicht vorhanden ist, wie z. B. a Pair
(worüber dasselbe gesagt werden könnte), darin besteht, dass Sie Ihre Daten in der Klasse kapseln sollten, die ihn verwendet, und die einfachste Implementierung sieht wie folgt aus:
/***
/* Within the class that's using a binary tree for any reason. You could
/* generalize with generics IFF the parent class needs different value types.
*/
private class Node {
public String value;
public Node[] nodes; // Or an Iterable<Node> nodes;
}
Das ist es wirklich für einen Baum beliebiger Breite.
Wenn Sie einen Binärbaum möchten, ist die Verwendung mit benannten Feldern oft einfacher:
private class Node { // Using package visibility is an option
String value;
Node left;
Node right;
}
Oder wenn Sie einen Versuch wollten:
private class Node {
String value;
Map<char, Node> nodes;
}
Jetzt hast du gesagt, du willst
um in der Lage zu sein, alle untergeordneten Elemente (eine Art Liste oder ein Array von Zeichenfolgen) mit einer Eingabezeichenfolge abzurufen, die einen bestimmten Knoten darstellt
Das klingt nach deinen Hausaufgaben.
Aber da ich mir ziemlich sicher bin, dass jetzt eine Frist 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; you didn't specify.
static public List<String> list(Node node, String find) {
return list(node, find, new ArrayList<String>(), false);
}
static private ArrayList<String> list(
Node node,
String find,
ArrayList<String> 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) {
// Usually never have to do setup like this, so excuse the style
// And it could be cleaner by adding a constructor like:
// 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";
// Enough setup
System.out.println(Arrays.toString(list(tree, args[0]).toArray()));
}
}
Dies bringt Sie dazu, wie folgt zu verwenden:
$ 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
[]