java 中的数字和字母二叉树
number and letter binary tree in java
我正在使用一个接口创建一个包含数字和字母的二叉树。我已经添加了所有字母,但是当我尝试使用 add 方法将数字添加到字母节点时,出现 "The method add(Node) in the type Collection> is not applicable for the arguments (int)" 错误。
接口方法是;
public void addChild(Node<treeNode> child);
public void addChild(int i);
实现的方法是;
@Override
public void addChild(Node<treeNode> child) {
children.add(child); // delegation
}
@Override
public void addChild(int i) {
children.add(i);
}
父节点代码,在 class 中,看起来像这样;
Node<String> H = new NodeImplement<String>("H", S, "left");
S.addChild(H);
我尝试添加的数字节点如下所示
Node<String> 5 = new NodeImplement<String>("5", H, "left");
H.addChild(5);
Node<String> 4 = new NodeImplement<String>("4", H, "right");
H.addChild(4);
我必须以某种方式解析它吗?我从 eclipse 获得的选项之一是 "Change method addChild(Node child) to addChild(int)" 但这会损害已经存在的字母表中的字母。
出现错误的原因:
类型 Collection> 中的方法 add(Node) 不适用于参数 (int)”错误
是因为您将整数传递给需要 Node 类型对象的方法。
你的树是否有字母作为节点的名称和数字作为值?这就是我的样子。假设是这种情况,您可以做的是拥有一个 class 节点。 class 有一个属性 int value , Node left , Node right 。如果它没有 left/right 节点,那么这些属性将为空。
所以当你将数字 5 添加到一个节点时,你所做的就是添加一个值为 5 的节点。
这有意义吗?
你的"number nodes"实际上是String节点。它甚至说节点。从您的界面和 class 中删除 addChild(int i)。那应该可以解决问题。但是请注意,您的数字由字符串表示。
如果你想在同一棵树中使用不同的类型,你必须创建一个接口并让所有类型实现它。
Interface NodeType {
}
class NodeTypeString implements NodeType {
private String string;
public NodeTypeString(String string) {
this.string = string;
}
public String getString() {
return string;
}
}
class NodeTypeNumber implements NodeType {
private int number;
public NodeTypeNumber(int number) {
this.number=number;
}
public int getNumber() {
return number;
}
}
你可以这样使用它:
NodeTypeNumber number = new NodeTypeNumber(5);
Node<NodeType> numberNode = new NodeImplement<NodeType>(number, H, "left");
NodeTypeString string = new NodeTypeString("foo");
Node<NodeType> stringNode = new NodeImplement<NodeType>(string, S, "right");
S.addChild(H);
树显然也是 Tree<NodeType>
另一种选择是使用 Tree<Object>
,因为您可以在其中存储任何对象。不过我建议不要这样做,因为它容易出错。
不是在指定字符串所在的位置写入数字,而是将数字拼写出来,然后将其添加为字符串
Node<String> five = new NodeImplement<String>("5", H, "left");
H.addChild(five);
Node<String> four = new NodeImplement<String>("4", H, "right");
H.addChild(four);
我正在使用一个接口创建一个包含数字和字母的二叉树。我已经添加了所有字母,但是当我尝试使用 add 方法将数字添加到字母节点时,出现 "The method add(Node) in the type Collection> is not applicable for the arguments (int)" 错误。
接口方法是;
public void addChild(Node<treeNode> child);
public void addChild(int i);
实现的方法是;
@Override
public void addChild(Node<treeNode> child) {
children.add(child); // delegation
}
@Override
public void addChild(int i) {
children.add(i);
}
父节点代码,在 class 中,看起来像这样;
Node<String> H = new NodeImplement<String>("H", S, "left");
S.addChild(H);
我尝试添加的数字节点如下所示
Node<String> 5 = new NodeImplement<String>("5", H, "left");
H.addChild(5);
Node<String> 4 = new NodeImplement<String>("4", H, "right");
H.addChild(4);
我必须以某种方式解析它吗?我从 eclipse 获得的选项之一是 "Change method addChild(Node child) to addChild(int)" 但这会损害已经存在的字母表中的字母。
出现错误的原因: 类型 Collection> 中的方法 add(Node) 不适用于参数 (int)”错误 是因为您将整数传递给需要 Node 类型对象的方法。
你的树是否有字母作为节点的名称和数字作为值?这就是我的样子。假设是这种情况,您可以做的是拥有一个 class 节点。 class 有一个属性 int value , Node left , Node right 。如果它没有 left/right 节点,那么这些属性将为空。
所以当你将数字 5 添加到一个节点时,你所做的就是添加一个值为 5 的节点。 这有意义吗?
你的"number nodes"实际上是String节点。它甚至说节点。从您的界面和 class 中删除 addChild(int i)。那应该可以解决问题。但是请注意,您的数字由字符串表示。
如果你想在同一棵树中使用不同的类型,你必须创建一个接口并让所有类型实现它。
Interface NodeType {
}
class NodeTypeString implements NodeType {
private String string;
public NodeTypeString(String string) {
this.string = string;
}
public String getString() {
return string;
}
}
class NodeTypeNumber implements NodeType {
private int number;
public NodeTypeNumber(int number) {
this.number=number;
}
public int getNumber() {
return number;
}
}
你可以这样使用它:
NodeTypeNumber number = new NodeTypeNumber(5);
Node<NodeType> numberNode = new NodeImplement<NodeType>(number, H, "left");
NodeTypeString string = new NodeTypeString("foo");
Node<NodeType> stringNode = new NodeImplement<NodeType>(string, S, "right");
S.addChild(H);
树显然也是 Tree<NodeType>
另一种选择是使用 Tree<Object>
,因为您可以在其中存储任何对象。不过我建议不要这样做,因为它容易出错。
不是在指定字符串所在的位置写入数字,而是将数字拼写出来,然后将其添加为字符串
Node<String> five = new NodeImplement<String>("5", H, "left");
H.addChild(five);
Node<String> four = new NodeImplement<String>("4", H, "right");
H.addChild(four);