二叉树:节点数与子树高度之间的最大值

时间:2014-04-20 15:01:58

标签: java binary-tree

我有一个定义二叉树的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) {
        //...
    }
}

任何人都可以帮助我吗? 感谢

1 个答案:

答案 0 :(得分:0)

让我们阅读要求

  

...子树中的节点数...

您需要一种方法public int numberOfNodesInSubtree()

  

......以及子树的高度......

您需要一种方法public int heightOfSubtree()

  

...... ...之间的比例

你需要一个方法double ratioScore(),(在这里你可以实现'要做到这一点,我必须加起来1,否则比率的叶子将是1/0 =无穷大。&#39 ;)

如果您实施了这三种方法,ratio应该很简单。

  

...返回对节点(或其中一个节点,...)U的引用,使得比率... 最大化

获取包含所有节点的List,Collection,Iterator等。循环遍历所有节点,计算比率得分,保持节点得分最高。返回得分最高的节点。