0

我在这里有两个用于 size() 的函数,但它们看起来都像废话。第一个使用重载函数,第二个,你自己看看。我想做的是创建第二次尝试的精巧版本,但我的想法很低。

PS:告诉我使用 Java 的 util 有点毫无意义。我想让它漂亮,而不是隐藏它。

所以我的函数是从 BST 对象调用的,看起来像这样:

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

 private int size(Node x) {
 if (x == null) {
 return 0;
 } else {
 return 1 + size(x.left) + size(x.right);
 }
 } 

现在我不想重载函数,所以我重写了它:

public int size() {
    Node y = root;
    if (y == null) {
        return 0;
    } else {
        root = y.left;
        int left = size();
        root = y.right;
        int right = size();
        root = y;
        return 1 + left + right;
    }
}

欢迎所有建议!

4

2 回答 2

1

如果它是定期调用的东西,也许你最好在你的Node类中缓存大小,并在插入或删除时更新,那么它就变成了

public int size() {
    return root == null ? 0 : root.size();
}
于 2013-09-20T16:03:52.663 回答
1

恕我直言,您的第一种方法已经足够好了。为什么?因为你有一个完美的公共接口(public size())来控制 BST 的大小是如何计算(使用private size())隐藏内部实现的。只要重载能带来更好的设计决策,我认为重载没有任何害处。

编辑:这是我对第一种方法比第二种方法更好的理解。我欢迎任何反馈。谢谢!!

于 2013-09-20T16:07:05.480 回答