我使用 inorder 来显示存储在二叉搜索树中的搜索名称的结果,但是当我运行它的示例时,我有:员工名称“abc”和“ab”,我输入名称 ="abc",它显示了其中的 2 个。任何人都可以帮助我我的错:( ty
public void searchFull(String name) {
EmployeeSLLNode p = root;
n=0;
if (p != null) {
inorder(p.left);
if(p.info.getFullname().equals(name)) {
n++;
System.out.printf("%2s %-5s %-8s %-6s %-6s%n", n, p.info.getID(), p.info.getFullname(), p.info.getAge(), p.info.getGender());
}
inorder(p.right);
}
}
最佳答案
中序遍历相当于迭代一个TreeMap
的 entrySet
.
final Map<String, Employee> employees = new TreeMap<String, Employee>();
...
for (final Map.Entry<String, Employee> entry : employees.entrySet()) {
/* iterating in-order */
}
TreeMap
仅使用二叉搜索树(特别是,根据 specification ,红黑树)。考虑使用它而不是推出自己的解决方案;-)
话虽这么说,如果你打算自己动手,也许试试这样的东西......
public EmployeeSSLnode search(final EmployeeSSLnode root, final String name) {
EmployeeSSLnode left;
return root == null
? null
: (left = search(root.left, name)) == null
? root.info.getFullname().equals(name)
? root
: search(root.right, name)
: left;
}
关于java - 在二叉搜索树中按顺序搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12023939/