java - 为什么我的打印方法无法按顺序打印出二叉搜索树?

标签 java linked-list tree binary-search-tree

当我在主方法中调用 print 方法时,它在控制台上不打印任何内容。 我正在尝试按字母顺序制作二叉搜索树。为什么会这样呢?我的插入方法和添加方法正确吗?或者说是打印方法有问题?

public class Node
{
    String value;
    Node leftChild;
    Node rightChild;

    Node(String val,Node left, Node right)
    {
        value = val;
        leftChild = left;
        rightChild = right;
    } 

    Node(String val)
    {
        value = val;
        leftChild = null;
        rightChild = null;

    }
}

public class binarySearchTree
{
    Node root;

    binarySearchTree()
    {
        root = null;
    }

    public Node search(String element)
    {
        Node current = root;
        while (element.compareTo(current.value) != 0 )
        {
            if(current == null)
                return null;
            else
            {
                if(element.compareTo(current.value) < 0)
                {
                    current = current.leftChild;
                }
                else
                current = current.rightChild;
            }
        }
        return current;
    }

    public Node add(String element, Node bstree)
    { 

        if(bstree == null)
        {
            return new Node(element);
        }
        else if(element.compareTo(bstree.value) < 0)
        {
            bstree.leftChild = add(element, bstree.leftChild);
        }
        else
        {
            bstree.rightChild = add(element, bstree.rightChild);
        }

        return bstree;
    }

    public void insert(String element)
    {
        add(element,root);
    }


    public void print(Node bstree)
    {
        if(bstree != null)
        {
            print(bstree.leftChild);
            System.out.print(bstree.value + " ");
            print(bstree.rightChild);
        }
    }    
}     

public class testing
{
    public static void main(String[] agrs)
    {
        binarySearchTree tree = new binarySearchTree();
        tree.insert("apple");
        tree.insert("banana");
        tree.insert("kiwi");
        tree.print(tree.root);
    }
}

最佳答案

您没有考虑到可能添加到空树的可能性,在这种情况下,您需要专门设置根节点:

public Node add(String element, Node bstree)
{ 
    if (root == null)
    {
        root = new Node(element);
        return root;
    }

    if (bstree == null)
    {
        return new Node(element);
    }
    else if (element.compareTo(bstree.value) < 0)
    {
        bstree.leftChild = add(element, bstree.leftChild);
    }
    else
    {
        bstree.rightChild = add(element, bstree.rightChild);
    }

    return bstree;
}

关于java - 为什么我的打印方法无法按顺序打印出二叉搜索树?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40856271/

相关文章:

java - 虽然有数据行,但结果集为空

java - 如何更改链表中的元素?

c - 如何在遍历单链表时删除任意节点?

c++ - 如何将单向链表转化为循环链表

java - 如何在一定时间后停止tomcat处理请求?

java - 为什么 Java 类库仍然使用 String 常量代替枚举

java - 将 InputArrayOfArrays 从 java 类传递到 JNI

algorithm - 如何实现三角身份证明算法

scala - 在 scalaz 中构造每个节点的 TreeLoc 的树

xslt - 结果树片段背后的基本原理是什么?