BST尺寸()看起来很漂亮

时间:2013-09-20 15:55:05

标签: java recursion coding-style binary-search-tree

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

P.S:告诉我使用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;
    }
}

欢迎所有建议!

2 个答案:

答案 0 :(得分:1)

如果它是经常调用的东西,也许你会更好地缓存Node类中的大小,并在插入或删除时更新,然后它就会变成

public int size() {
    return root == null ? 0 : root.size();
}

答案 1 :(得分:1)

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

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