我创建了一个BST,它将每个节点设置为一个String值,我想知道是否有办法搜索树,但一次只能搜索一个值。所以说节点中的字符串是“卡车”有没有办法搜索树并返回“t”?这是我构建树的代码:
public class BinaryTree {
public Node root;
public BinaryTree tree;
public static int pos;
public static Node[] theArray;
private static class Node {
Node left;
Node right;
String data;
Node(String s) {
left = null;
right = null;
data = s;
}
}
public BinaryTree plantTree(ArrayList<String> dict) {
tree = new BinaryTree();
Collections.shuffle(dict);
for (String s : dict) {
s.toUpperCase();
tree.add(s);
}
return tree;
}
/**
* Creates an empty binary tree
*/
public BinaryTree() {
root = null;
}
public void add(String data) {
root = add(root, data);
}
private Node add(Node node, String data) {
if (node == null) {
node = new Node(data);
} else {
if (data.compareTo(node.data) > 0) {
node.left = add(node.left, data);
} else {
node.right = add(node.right, data);
}
}
return (node);
}
}
答案 0 :(得分:1)
也许我误解了你的问题,但听起来你想要一些东西来遍历树。我会使用访客模式。 (这听起来像家庭作业,所以为什么不使用标准模式。:))
public class Node<T>{
...
public void visitDepthFirst(Visitor<T> v){
v.visit(this);
if (left != null){
left.visitDepthFirst(v);
}
if (right != null){
right.visitDepthFirst(v);
}
}
}
interface Visitor<T>{
public void visit(T t);
}
...
Node<String> root = ...;
root.visitDepthFirst(new Visitor<String>(){
public visit(String val){
if ("truck".equals(val)){
// do something
}
}
});
我会让你弄清楚广度搜索。此外,使用泛型可以更方便地使用节点类。你的班级结构有点令人困惑。我建议你只使用节点AS树本身。毕竟,树中的每个节点都是树本身。 (阅读复合模式)
答案 1 :(得分:0)
所以看来你试图只用第一个字母搜索你的树。这将与返回整个单词一样长。所以你仍然需要使用BST遍历或搜索算法。
答案 2 :(得分:0)
所以说节点中的字符串是“卡车”有搜索方式 通过树并返回“t”?
真的,我不知道这个问题是什么 如果您有BST,则使用二进制搜索进行搜索。就是这样。
如果找到该元素,二进制搜索将返回true
。您可以实现自己的BST,而不是在问题boolean
中返回Char
而是t
,如果值不是树的一部分,则返回null
。