2013-02-22 139 views
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; 
     } 
    } 
} 

但没有说明信息关于为什么有两个独立的高度方法。 因此,我问你们是否有可能将这两种方法合并为一种高度方法。如果没有,是否有可能?为什么不?

赞赏可能的任何帮助, 鲍勃。

回答

1

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

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

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

1

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

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

0

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

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