java中的数字和字母二叉树

时间:2015-04-01 19:23:52

标签: java collections

我正在使用界面创建一个包含数字和字母的二叉树。我添加了所有字母但是当我尝试使用add方法将数字添加到字母节点时,我得到一个“类型Collection>中的方法add(Node)不适用于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);    
}

父节点代码本身就在一个类中,看起来像这样;

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中获得的一个选项是“将方法addChild(Node child)更改为addChild(int)”,但这会影响已经存在的字母表中的字母。

3 个答案:

答案 0 :(得分:1)

不是写出指定字符串所在的数字,而是将数字拼出,然后将其添加为字符串

Node<String> five = new NodeImplement<String>("5", H, "left");
H.addChild(five);

Node<String> four = new NodeImplement<String>("4", H, "right");
H.addChild(four);

答案 1 :(得分:0)

您收到错误的原因: 方法add(Node)类型Collection&gt;不适用于参数(int)“错误 是因为您将整数传递给需要Node类型对象的方法。

你的树是否有字母作为节点的名称和数字作为值?这就是我的样子。假设这是你可以做的是拥有一个类Node。该类具有 int value Node left Node right 的属性。如果它没有左/右节点,那么这些属性将为null。

因此,当您向节点添加数字5时,您要做的是添加一个值为5的节点。 这有意义吗?

答案 2 :(得分:0)

您的“数字节点”实际上是字符串节点。它甚至说Node。从您的界面和您的类中删除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>,因为你可以在里面存储任何对象。我会建议反对它,因为它容易出错。