我是Java编程的新手,我正在努力学习如何制作BST。这是我的代码:
类TreeNode:
public void insert( Town d ) {
if ( d.compareTo(data1) < 0 ) //ERROR HERE
{
if ( left == null )
left = new TreeNode( d );
else
left.insert( d );
}
else if ( d.compareTo(data1) > 0 ) //ERROR HERE
{
if ( right == null )
right = new TreeNode( d );
else
right.insert( d );
}
}
}
错误无法找到符号。
答案 0 :(得分:0)
错误告诉您没有名为data1
的变量。从了解二叉树的工作原理,我建议定义TreeNode
成员data1
来保存节点的数据。您的TreeNode
课程将如下所示:
public class TreeNode {
private int data1;
public TreeNode (int data) {
data1 = data;
}
public int getData() {
return data1;
}
public void insert( Town d ) {
if ( d.compareTo(data1) < 0 ) {
if ( left == null )
left = new TreeNode( d );
else
left.insert( d );
} else if ( d.compareTo(data1) > 0 ) {
if ( right == null )
right = new TreeNode( d );
else
right.insert( d );
}
}
}
答案 1 :(得分:0)
我能够从您的问题中收集您打算在this
节点的左侧或右侧插入节点。我在一些不需要的地方明确使用了关键字this
,以展示我认为您打算完成的任务。
假设每个TreeNode都有一个名为town
的城镇:
if (this.town.compareTo(d) < 0)
{
if (left == null)
left = new TreeNode(d);
else
left.insert(d);
}
else if (this.town.compareTo(d) > 0 )
{
if (right == null)
right = new TreeNode(d);
else
right.insert(d);
}
}
其他答案仍然正确 - 您提到的行中的其中一个符号并不存在于您尝试使用它的范围内。它可以是data1
,也可以是您的compareTo()
方法。
如果Towns按人口排序,您可以使用一个简洁的数学技巧来实现您的compareTo。
public int compareTo(Town other) {
return this.population - other.population;
}
或者,如果Town按名称排序,您可以重复使用String的compareTo方法。
return this.name.compareTo(other.name);
在必须实现更复杂的compareTo时,如果this
小于other
,则返回负int,如果相等则返回0,如果this
更大则返回正int比other
。
答案 2 :(得分:0)
在您的Town类中添加一个名为compareTo(Datatype data1)的方法。
public class Town {
public int compareTo(Town data1) {
// compare both the object and return the coresponding value
return 0;
}
}
答案 3 :(得分:-1)
您可以在两个对象上使用函数.equals(),这两个对象在Java中实现了通用java方法equals()和hashcode()。
hashcode()方法用于获取对象的整数值,equals()方法使用此哈希值(整数)来比较并返回一个布尔值(不管它们是否相等)。然后,您可以使用.equals()
比较对象public void insert( Town d ) {
if ( d.equals(data1) < 0 ) //ERROR HERE
{
if ( left == null )
left = new TreeNode( d );
else
left.insert( d );
}
else if ( d.equals(data1) > 0 ) //ERROR HERE
{
if ( right == null )
right = new TreeNode( d );
else
right.insert( d );
}
}
}
鉴于数据属于Town类型。您可以使用IDE自动插入这两个方法。
以下是完整的解释/示例:http://javarevisited.blogspot.ca/2011/02/how-to-write-equals-method-in-java.html