我在这里有两个函数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;
}
}
欢迎所有建议!
答案 0 :(得分:1)
如果它是经常调用的东西,也许你会更好地缓存Node
类中的大小,并在插入或删除时更新,然后它就会变成
public int size() {
return root == null ? 0 : root.size();
}
答案 1 :(得分:1)
恕我直言你的第一种方法已经足够好了。为什么?因为你有一个完美的公共接口(public size()
)来管理如何计算BST的大小(使用private size()
)来隐藏内部实现。只要能够做出更好的设计决策,我认为超载没有任何损害。
编辑:这是我对第一个方法比第二个方法更好的理解。我欢迎任何反馈。谢谢!