你可能会觉得这道题的超时是树引起的,如果你的代码只有一般的建树和遍历操作,那么事实上树很无辜。问题在于Scanner.
请参考这篇文章解决Java在OJ时运行超时的问题-AdamLeeXi ,这里详细地介绍了Scanner和BufferedReader的时间效率上的区别(相差很大)。
课上讲的有些记不清了,不过基本上的逻辑是,你需要用一个StringTokenizer来接BufferedReader.readLine()的结果,而StringTokenizer可以被转换成String型,之后再用把字串转换成int。