使用静态方法

时间:2016-04-26 03:24:38

标签: java data-structures tree binary-tree inorder

我必须创建一个静态方法来检查给定的树是否是二叉搜索树。它需要BinaryTree<String>作为参数,它只能触摸每个节点一次。

我以前用树填充了数字,但是数据类型为String,我现在将它们切换为字母,因为有些人认为我想使用整数。

我遇到的问题是,当我在tree4上执行isBST()方法时,boolean bst没有被触发。

到目前为止我所拥有的是:

public class BinarySearchTree < T extends Comparable < ? super T >> {
    public static boolean isBST(BinaryTree<String> tree) {
        boolean bst = true;

        if (tree.getRootData() != null) {
            Iterator<String> iterator = tree.getInorderIterator();
            String prev = iterator.next();

            while (bst && iterator.hasNext()) {
                String next = iterator.next();
                System.out.println(next); // Debug purposes only
                if (prev.compareTo(next) > 0) {
                    bst = false;
                }
            }
        }
        return bst;
    }
}

对于我的测试用例,我有这个:

public class Test {
    public static void main(String[] args) {
        BinarySearchTree<String> tree1 = new BinarySearchTree<String>();
        BinarySearchTree<String> tree2 = new BinarySearchTree<String>();

        BinaryTree<String> h           = new BinaryTree<String>("h");
        BinaryTree<String> g           = new BinaryTree<String>("g");
        BinaryTree<String> f           = new BinaryTree<String>("f");
        BinaryTree<String> e           = new BinaryTree<String>("e", f, g);
        BinaryTree<String> d           = new BinaryTree<String>("d");

        BinaryTree<String> a           = new BinaryTree<String>("a");
        BinaryTree<String> b           = new BinaryTree<String>("b");

        BinaryTree<String> tree3       = new BinaryTree<String>("c", a, e);
        BinaryTree<String> tree4       = new BinaryTree<String>("c", a, b);

        System.out.println("BinarySearchTree.isBST(tree3): " + BinarySearchTree.isBST(tree3));
        System.out.println("BinarySearchTree.isBST(tree4): " + BinarySearchTree.isBST(tree4));
    }
}

返回以下输出:

c
f
e
g
BinarySearchTree.isBST(tree3): true
c
b
BinarySearchTree.isBST(tree4): true

当我从静态方法中打印出compareTo语句时,我看到第二个树(tree4)在它命中 b 时返回-1。这就是为什么对于tree4,它返回true,因为布尔值没有被触发。

对此有何建议?

2 个答案:

答案 0 :(得分:1)

String的compareTo()函数按字符串的字母顺序(自然顺序)而不是实际数值(您想要比较)工作。
比较整数的字符串值,没有多大意义。

无论如何,在您的示例中 - 您需要更新'prev',同时执行,在您的示例树中,每个inorder继承器将被比较为4(因为它从未更新)并且所有值都超过4,所以true是回。

在另一种情况下,(当你改变9到10时)按字典顺序,10&lt; 4所以你变得虚假。因此,如果要比较整数的“实际”值,请使用Integer,而不是String。

改为使用BinaryTree<Integer>树,您的解决方案应该正常工作

答案 1 :(得分:0)

添加到Parthas答案

    public static void main (String[] args) {
    String ten = "10";
    String nine = "9";
    System.out.println(nine.compareTo(ten));
    System.out.println(ten.compareTo(nine));
}

产地:

8

-8

与你想要的相反。