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 valueNode leftNode 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);