虽然这个问题对其他人来说似乎不是问题,但我坚持认为,我无法解决。互联网上似乎没有类似的东西。我需要在常规二叉树中为节点添加值。我输入树中的节点数,然后输入根(零)的序数和根中的值,最后,我输入节点(子)的序数,子的值,如果是左或右孩子的信息,以及父母的序数。最后,打印二叉树。有两个类,一个用于节点,一个用于树(数据成员是root)。代码编译,当我输入节点数时,程序抛出异常 - java.lang.NumberFormatException: For input string: ""
。我被困在这里。这是代码,感谢先进的帮助。
import java.util.Scanner;
public class BinaryTreeGeneral {
public static void main( String[] args ) {
Scanner in = new Scanner( System.in );
int N = in.nextInt();
BNode<String> nodes[] = new BNode[N];
BTree<String> tree = new BTree<>();
String[] input = in.nextLine().split(" ");
nodes[Integer.parseInt(input[0])] = new BNode<String>(input[1]);
tree.root = nodes[Integer.parseInt(input[0])];
for (int i = 1; i < N; i++) {
input = in.nextLine().split(" ");
nodes[Integer.parseInt(input[0])] = new BNode<String>(input[1]);
if (input[2].equals("LEFT"))
tree.addNode(nodes[Integer.parseInt(input[3])], BNode.LEFT, nodes[Integer.parseInt(input[0])]);
else
tree.addNode(nodes[Integer.parseInt(input[3])], BNode.RIGHT, nodes[Integer.parseInt(input[0])]);
}
tree.printTreeInorder();
}
}
/*Sample Input:
10
0 10
1 19 LEFT 0
2 8 LEFT 1
3 7 LEFT 2
4 60 RIGHT 2
5 5 RIGHT 1
6 4 RIGHT 0
7 13 RIGHT 6
8 2 LEFT 7
9 1 RIGHT 7*/
另外,我想问一下这是一种向树的节点添加值的标准方法,还是在实际情况下有更实用,更有利的方法,而不是教科书示例?
答案 0 :(得分:0)
问题是你在混淆nextInt
和nextLine
而没有完全理解他们做了什么。
nextInt
方法提取下一个标记并将其解析为整数。 nextLine
会读取(并包括)下一行结束标记,并在删除行尾时将其返回。所以...如果你打电话给nextInt
而nextLine
为一个由一个数字组成的行,那么nextLine()
调用将返回一个空字符串。 (如果你不明白我在说什么,请仔细阅读这两种方法的javadocs。)
解决方案包括:
nextLine()
之后添加nextInt()
电话,以消费其余部分。nextLine()
和split(...)
,只需使用nextInt()
和next()
来电。nextLine().split(...)
作为第一行。