从Java中的String实现二进制搜索树

时间:2017-10-01 16:58:18

标签: java

我正在编写一个程序,使用BST按升序对数字字符串进行排序,并将排序的字符串打印为文本,但我似乎无法理解为什么它不能正常运行。当我尝试使用StringBuilder从树构建String时,似乎树是空的。我原本以为我的问题是我在下面写的addNode()方法:

public static TreeNode addNode(TreeNode root,char token){
    if (root == null){
        root = new TreeNode(token);
        return root;
    } else if (root.value >= token) {
            root.left = addNode(root.left, token);
        } else {
            root.right = addNode(root.right, token);
        }
    System.out.println(root);
    return root;
}

令牌和TreeNode的值正从此方法中读取,该方法读取字符串:

public static TreeNode translateString(String tokenize){
    TreeNode r = new TreeNode();

    for(int i=0; i < tokenize.length(); i++){
        char token = tokenize.charAt(i);
        System.out.println(token);

    if (Character.isDigit(token)){
       r = addNode(r, token);
    } else if (token == ' ') {
        continue;
    }    
}   
return r;    
}   

我原本以为我的问题是使用addNode()方法,但是如果我追踪我想法它正在做什么似乎有意义。但是,当它打印输出字符串时,我没有得到任何值。我对addNode()方法所做的任何更改似乎都不起作用,所以我现在想的是问题在于translateString()方法。我已经被困在这几个小时了,我不知道从哪里开始。任何新鲜的眼睛都会非常感激!

1 个答案:

答案 0 :(得分:0)

你遇到的一个问题是看起来无辜:

TreeNode r = new TreeNode();

通过这样做,您可以跳过null中的addNode()逻辑。相反,您将使根成为字符值为零的节点,而该节点不是可打印字符。我想你可能想要这样的东西:

TreeNode r = null;