我正在尝试创建一个二叉搜索树,而我在创建实现add方法的main方法时遇到了困难。
以下是目前的主要方法:
public static <T> void main(String [] args) throws IOException
{
File inFile;
inFile = new File("inwords.txt");
BinaryTreeNode<T> node;
String next;
T tNext;
Scanner s = new Scanner(inFile);
LinkedBinarySearchTree<T> lbst = new LinkedBinarySearchTree<T>();
while(s.hasNext())
{
next = s.next();
node = new BinaryTreeNode(next);
lbst.addElement(next, node);
}
Iterator it = myTree.iteratorInOrder();
while(it.hasNext())
{
System.out.println(it.next());
}
}
编译器说add方法需要一个类型T而不是一个字符串,但我认为泛型的全部意义在于可以发送任何数据类型
以下是添加方法:(这些是预先写好的)
public void addElement(T element)
{
if (!(element instanceof Comparable))
throw new NonComparableElementException("LinkedBinarySearchTree");
Comparable<T> comparableElement = (Comparable<T>)element;
if (isEmpty())
root = new BinaryTreeNode<T>(element);
else
{
if (comparableElement.compareTo(root.getElement()) < 0)
{
if (root.getLeft() == null)
this.getRootNode().setLeft(new BinaryTreeNode<T>(element));
else
addElement(element, root.getLeft());
}
else
{
if (root.getRight() == null)
this.getRootNode().setRight(new BinaryTreeNode<T>(element));
else
addElement(element, root.getRight());
}
}
modCount++;
}
private void addElement(T element, BinaryTreeNode<T> node)
{
Comparable<T> comparableElement = (Comparable<T>)element;
if (comparableElement.compareTo(node.getElement()) < 0)
{
if (node.getLeft() == null)
node.setLeft(new BinaryTreeNode<T>(element));
else
addElement(element, node.getLeft());
}
else
{
if (node.getRight() == null)
node.setRight(new BinaryTreeNode<T>(element));
else
addElement(element, node.getRight());
}
}
我不确定为什么有两种添加方法,区别是什么。 任何帮助都会很棒。
答案 0 :(得分:0)
您有三种方法:
main()
- 获取用户的输入和
addElement()
将用户输入插入树中。
addElement()
有两个版本,一个从根节点(第一个版本)开始插入,另一个从特定节点开始。
这确实有点令人困惑,因为第一个版本可以用更简单的版本替换:
public void addElement(T element) {
if (!(element instanceof Comparable))
throw new NonComparableElementException("LinkedBinarySearchTree");
Comparable<T> comparableElement = (Comparable<T>)element;
if (isEmpty()) {
root = new BinaryTreeNode<T>(element);
modCount++;
}
else {
addElement(element, root);
}
}