1

我正在编写 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;
        }
    }
}

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

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

4

3 回答 3

1

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

如果 height 方法是在 Node 级别实现的,那么它可以在一个没有参数的递归方法中完成。

于 2013-02-22T09:36:50.610 回答
1
于 2013-02-22T09:34:13.330 回答
0

请注意,该int height()方法是public。这是将从您的班级外部调用的那个。它必须决定树的高度。它会通过调用另一个来做到这一点。

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

于 2013-02-22T09:51:43.520 回答