java - 递归地将节点插入 BST 时尽量不要调用助手
问题描述
我正在编写递归以插入 BST 的节点。我在网上看到很多例子调用助手,但我尽量不这样做。但是,我的代码会引发错误。
似乎已添加第一个数字,因为大小为 1。但是,异常似乎仍然将根视为空。
public void add(Node root, E e) {
if(root == null) {
this.root = new Node(e);
size++;
}
else {
if(e.compareTo((E)this.root) > 0)
add(this.root.right, e);
else
add(this.root.left, e);
}
} // add
public class Main {
public static <E> void main(String[] args){
BST<Integer> bst = new BST();
int[] nums = {5, 3, 6, 8, 4, 2};
for(int num: nums) {
System.out.printf("size = %d\n",bst.size());
System.out.printf("root = %d\n",bst.root);
System.out.printf("num = %d\n",num);
bst.add(bst.root, num);
}
}
以下是输出和错误的详细信息
size = 0
root = null
num = 5
size = 1
root = Exception in thread "main" java.util.IllegalFormatConversionException: d != myBST.BST$Node
at java.base/java.util.Formatter$FormatSpecifier.failConversion(Formatter.java:4445)
at java.base/java.util.Formatter$FormatSpecifier.printInteger(Formatter.java:2957)
at java.base/java.util.Formatter$FormatSpecifier.print(Formatter.java:2911)
at java.base/java.util.Formatter.format(Formatter.java:2689)
at java.base/java.io.PrintStream.format(PrintStream.java:1209)
at java.base/java.io.PrintStream.printf(PrintStream.java:1105)
at myBST.Main.main(Main.java:9)
解决方案
异常的原因很明确:
System.out.printf("root = %d\n",bst.root);
'root' 的类型为 Node
'%d' 需要一个数字参数(或 null)
这就是错误消息显示“IllegalFormatConversionException:d!= myBST.BST$Node”的原因
我会在继续之前解决这个问题,这样你就可以看到真正发生的事情。
推荐阅读
- msbuild - 如何通过 MSBuild 复制任务复制 NuGet 包引用的 contentFiles
- primefaces - 如何在primefaces的列标签中隐藏某些列?
- python - buildozer APK 无法在 Android 手机上启动
- git - VSCode Git 无法正确显示文件中的提交
- python - discord.py 自定义帮助信息
- python - 从子类访问存储在父类中的 DataFrame
- spring-integration - 将 EmbeddedKafkaBroker 与 spring 集成和 spring kafka 一起使用
- ruby-on-rails - 如何修复 Rails 导出的 Excel (.xls) 文件中的字符编码?
- performance - random_number 子程序运行时间比较 ifort 与 gfortran
- java - Android Google Drive Api v3 上传文件不重复