Java 二叉树的大小法
我刚刚遇到了一个查找二叉树大小的代码Java 二叉树的大小法,java,oop,binary-tree,Java,Oop,Binary Tree,我刚刚遇到了一个查找二叉树大小的代码 public int size() { return(size(root)); } private int size(Node node) { if (node == null) return(0); else { return(size(node.left) + 1 + size(node.right)); } } 我很困惑,为什么有两种方法,一种没有争议。我可以猜到这是一种很好的做法,但我想不出原因 采用节点的si
public int size() {
return(size(root));
}
private int size(Node node) {
if (node == null) return(0);
else {
return(size(node.left) + 1 + size(node.right));
}
}
我很困惑,为什么有两种方法,一种没有争议。我可以猜到这是一种很好的做法,但我想不出原因 采用
节点
的size
方法是递归实现的——它从该节点
向下查找树的大小。这在二叉树类之外没有用处,因此它是私有的
另一个
size
方法查找整个树的大小,调用方不必传入节点
;二叉树已经知道它的根是什么。它不是递归的。它委托给另一个size
方法,传递root
以获得整个树的大小。它在课堂之外非常有用,因此它是公共的
一个是公共的
,一个是私人的
。因此,一个在外部公开和使用,没有任何参数public int size()
,另一个只在内部使用,在外部隐藏private int size(Node)
这一概念称为封装,是隐藏内部细节的行为,这些细节不需要公开供一般使用,以简化类(或库)的使用.OOPs建议您应该在私有方法中编写业务逻辑。根据我的视图,带参数的size方法是私有的,您计算大小的逻辑在这里,因此没有其他on(类外)可以修改或访问您的逻辑(通过继承)。您正在使用另一个size返回此size方法,该方法具有public修饰符,其他用户将使用该类获取size基本上其他用户不知道您如何计算size。而且带有参数的是private,这意味着我只能使用
MyBinaryTree bt = new MyBinaryTree();
int treeSize = bt.size();
通常代码可以有注释来知道它们的用途。有时,干净的代码甚至不需要注释
/**
* Gets the size of the current binary tree.
*/
public int size() {
return(size(root));
}
/**
* Gets the size of the given branch
* @param node The branch to count from.
*/
private int size(Node node) {
if (node == null) return(0);
else {
return(size(node.left) + 1 + size(node.right));
}
}
理论上,在二叉树中具有子级的所有分支也可以作为二叉树处理
请注意,size()
将调用以根节点为参数的第二个参数,在本例中,它表示从A开始的计数,在内部它将是
Size of the tree is count of items from A
Items from A are 1 + Items from B + Items from C
Items from B are 1
Items from C are 1 + Items from D + items from E
现在,你为什么要用一个
可能没有什么理由去做或不做。通常,这意味着有多种方法来做某事,或者您希望使用其他方法作为默认值,在这种情况下,size()将用作默认根