合并方法(二叉搜索树)

时间:2013-02-22 09:31:07

标签: java methods merge binary-search-tree

我正在写一个BST(二进制搜索树),我正在阅读的一本书中有一个例子,它提供了这段代码

public int height() {
    return height(root);
}

private int height(BinaryNode<E> node) {
    if (node == null) {
        return 0;
    } else {
        int leftHeight = height(node.left);
        int rightHeight = height(node.right);

        if (leftHeight < rightHeight) {
            return 1 + rightHeight;
        } else {
            return 1 + leftHeight;
        }
    }
}

但是没有关于为什么有两种不同高度方法的解释性信息。 因此,我问你们是否有可能将这两种方法合并为一种高度方法。如果没有,是否可能。为什么不呢?

感谢任何可能的帮助, 鲍勃。

3 个答案:

答案 0 :(得分:1)

这是method overloading的一个例子 有两个具有相同名称的方法,它们根据传递的参数类型的不同而不同。

第一种方法没有参数,第二种方法有一个BinaryNode<E>类型的参数 当第一个方法被调用时,它调用第二个方法传递root变量(我假设它是BinaryNode<E>类型)。

第一个也是公共的,所以你可以从其他类调用它,第二个是私有的,只能从定义它的类中调用。

答案 1 :(得分:1)

假设您提供的方法是树类的一部分,那么我看不到如何合并它们。第一个是公共方法,它不需要参数,第二个是帮助递归方法,它检查给定节点的高度。第一个使用第二个:它在根本身上调用辅助方法。第二种方法不应该从外面看到,所以它是私有的。

如果在节点级别实现了height方法,那么可以在没有参数的单个递归方法中完成。

答案 2 :(得分:0)

请注意,int height()方法公开。这是将从你的课外调用的那个。它必须决定树的高度。它会通过调用另一个来完成。

另请参阅int height(BinaryNode<E> node) 私有,因为public int height()方法仅使用它来确定任何子树的高度。