首页 > 解决方案 > 递归地将节点插入 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)

标签: javarecursionbinary-search-tree

解决方案


异常的原因很明确:

System.out.printf("root = %d\n",bst.root);

'root' 的类型为 Node

'%d' 需要一个数字参数(或 null)

这就是错误消息显示“IllegalFormatConversionException:d!= myBST.BST$Node”的原因

我会在继续之前解决这个问题,这样你就可以看到真正发生的事情。


推荐阅读