我有一个定义二叉树的java类。 现在我必须添加一个方法( ratio()),该方法返回对节点的引用(或者对于其中一个节点,如果有多个节点)U这样的数量之间的比例根U的子树中的节点(因此包括节点本身)和子树的高度最大化。 要做到这一点,我必须加起来1,否则比率的叶子将是1/0 =无穷大。
我以为我会定义一个公共方法来检查这个树是否为空,然后返回一个异常,否则它调用一个私有方法,它在根的两个子树上完成所有工作。
但是私有方法(如果这个程序是正确的)我不知道怎么写它。 我还可以定义一个可以帮助我完成这项任务的课程,但是如何?
public class BinaryTree {
protected class Node {
protected Integer element;
protected Node left;
protected Node right;
Node(int element) {
this.element = element;
left = right = null;
}
Node(int element, Node left, Node right) {
this.element = element;
this.left = left;
this.right = right;
}
} //end Node class
public class NodeReference {
private Node node;
private NodeReference(Node node) {
this.node = node;
}
public int getElement() {
return node.element;
}
public void setElement(int e) {
node.element = e;
}
}
protected Node root;
public BinaryTree() {
root = null;
}
private class BoolNode {
boolean found;
Node node;
BoolNode(boolean found, Node node) {
this.found = found;
this.node = node;
}
}
public NodeReference ratio() {
if(isEmpty()) //equals to if(root == null)
throw new IllegalStateException("Empty tree.");
else
ratio(root);
}
private NodeReference ratio(Node node) {
//...
}
}
任何人都可以帮助我吗? 感谢
答案 0 :(得分:0)
让我们阅读要求
...子树中的节点数...
您需要一种方法public int numberOfNodesInSubtree()
......以及子树的高度......
您需要一种方法public int heightOfSubtree()
...... ...之间的比例
你需要一个方法double ratioScore()
,(在这里你可以实现'要做到这一点,我必须加起来1,否则比率的叶子将是1/0 =无穷大。&#39 ;)
如果您实施了这三种方法,ratio
应该很简单。
...返回对节点(或其中一个节点,...)U的引用,使得比率... 最大化。
获取包含所有节点的List,Collection,Iterator等。循环遍历所有节点,计算比率得分,保持节点得分最高。返回得分最高的节点。