你能帮我打印一个用二叉搜索树制作的家谱吗?



我已经开始学习二叉搜索树,我做了一个练习,要求我用二叉搜索树制作一个家谱。

我已经创建了它,但是我遇到了一些问题,所以我不确定它是否正确,它有四个变量:名字,姓氏,父亲和母亲,这使得这棵树与我已经看到的所有例子完全不同。我将在下面的代码中展示我已经完成的操作:

//I have created a class Ancestor
public class Ancestor {
String name;
String surname;
Ancestor father;
Ancestor mother;
public Ancestor (String name, String surname){
this.name = name;
this.surname = surname;
father = null;
mother = null;
}
public void printAncestor() {
System.out.println("Ancestors:"+"");
}
public void postOrder (Ancestor a) {
if (a == null) {
return;
}
else {
postOrder(a.mother);
postOrder(a.father);
a.printAncestor();
}
}
}
//Another class familyTree
public class familyTree {
static Ancestor root = null;
static void insertAncestor (String n, String s){
Ancestor temp = root;
Ancestor prev = null;
boolean notFound = true;
while (temp != null && notFound){
if (temp.name.equals(n) && temp.surname.equals(s)){
notFound = false;
break;
}
else if (n.compareTo(n)<0 && s.compareTo(s)<0){
prev = temp;
temp = temp.mother;
}
else {
prev = temp;
temp = temp.father;
}
}
if (notFound){
Ancestor a = new Ancestor(n, s);
if (prev == null) {
root = a;
}
else if (n.compareTo(n)<0 && s.compareTo(s)<0){
prev.mother = a;
}
else {
prev.father = a;
}
}
}
}
//And I have tried to create a family tree in the main class
public class Main {
public static void main(String[] args) {
// write your code here
familyTree f = new familyTree();
f.insertAncestor("Adam", "H");
f.insertAncestor("Charles", "B");
f.insertAncestor("Mary", "C");
f.insertAncestor("Matthew", "W");
f.insertAncestor("Jane", "X");
}
}

我想知道我的类是否有意义,因为它们没有显示错误,但它们仍然可能令人困惑。我还想知道我是否正确创建了家谱,并根据我打印家谱的方法,我将如何打印它?我试过这样的:

f.postOrder();

但它没有成功。所以我不确定这是怎么回事。正如我所说,变量(姓名、姓氏、父亲、母亲)与互联网和其他材料上的大多数示例不同,这一事实让我感到困惑。无论如何,我提前感谢大家。

所以有几点。 首先是一个小的样式问题:最好使用更具描述性的变量名称。 您有一个方法签名,如下所示:

static void insertAncestor (String n, String s)

好吧,ns不能很好地命名参数。 我从上下文中可以看出,n是名字,s是姓氏,但为什么不直接称呼他们namesurname呢?

就实际代码功能而言,这句话立即跳出来了:

else if (n.compareTo(n)<0 && s.compareTo(s)<0){

您正在将ns与它们进行比较,因此比较将始终导致 0,并且 if 块将始终被跳过,并将落入 else 块。

那里所需的功能是什么? 你如何决定是走母亲那边还是父亲那边的树? 你如何表示"这个新祖先应该作为根的母亲的母亲的父亲的母亲的母亲"插入? 二叉树可能不是您首先应该使用的数据结构。 并非每种数据结构都适合每个问题。

最新更新