Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中从字符串实现二叉搜索树_Java - Fatal编程技术网

在Java中从字符串实现二叉搜索树

在Java中从字符串实现二叉搜索树,java,Java,我正在编写一个程序,使用BST按升序对数字字符串进行排序,并将排序后的字符串打印为文本,但我似乎无法解释它为什么不能正常工作。当我尝试使用StringBuilder从树构建字符串时,似乎树是空的。我最初认为我的问题在于我在下面编写的addNode()方法: public static TreeNode addNode(TreeNode root,char token){ if (root == null){ root = new TreeNode(token);

我正在编写一个程序,使用BST按升序对数字字符串进行排序,并将排序后的字符串打印为文本,但我似乎无法解释它为什么不能正常工作。当我尝试使用StringBuilder从树构建字符串时,似乎树是空的。我最初认为我的问题在于我在下面编写的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;
}
正在从此读取字符串的方法中提取令牌和树节点的值:

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;    
}   
publicstatictreenodetranslatestring(字符串标记化){
TreeNode r=新的TreeNode();
for(int i=0;i

我最初认为我的问题是addNode()方法,但如果我跟踪我认为它在做什么,这似乎是有道理的。但是,当它打印输出字符串时,我没有得到任何值。我对addNode()方法所做的任何更改似乎都不起作用,因此我现在认为问题在于translateString()方法。我已经被困在这个问题上好几个小时了,我不知道接下来该怎么办。任何新的眼睛将不胜感激

您遇到的一个问题是这条看起来很无辜的线:

TreeNode r = new TreeNode();
这样做,您将跳过
addNode()
中的
null
逻辑。取而代之的是将根节点设置为字符值为零的节点,这不是可打印的字符。我想你可能想要这样的东西:

TreeNode r = null;

欢迎来到堆栈溢出!看起来您需要学习使用调试器。请随便吃点。如果您以后仍有问题,请随时回答更具体的问题。使用调试器查看
translateString
末尾的树,并查看其中的内容。