Desátý domácí úkol

Vaším úkolem je doprogramovat třídy implementující rozhraní Node podle následující specifikace:

  1. metoda maxTreeDepth vrátí maximální hloubku nějakého listového uzlu (instance LeafNode), hloubka stromu o jednom uzlu je 1,
  2. metoda minDepthOfLeafNode vrátí minimální hloubku nějakého listového uzlu,
  3. metoda maxAlternateTreeDepth vrátí maximální hloubku pouze z těch listových uzlů, které nejsou potomky MarkerNode, pokud jsou všechny listové uzly potomky MarkerNode, vrátí 0,
  4. metoda alternateTreeDepthCopy vrátí kopii daného stromu, ve které jsou podtromy pod instancemi MarkerNode nahrazeny instancí LeafNode (např. new InnerNode(ImmutableList.of(new LeafNode(), new MarkerNode(new LeafNode()))) je zkonvertován na new InnerNode(ImmutableList.of(new LeafNode(), new LeafNode())).

Odevzdávaný kód (rozhraní Node a třídy LeafNode, InnerNode a MarkerNode) uložte do svého repozitáře do souboru hw/Assignment10.java. Termín odevzdání je 25. 5. ve 24:00.

import com.google.common.collect.ImmutableList;
 
interface Node {
    int maxTreeDepth();
    int minDepthOfLeafNode();
    int maxAlternateTreeDepth();
    Node alternateTreeDepthCopy();
}
 
class LeafNode implements Node {
}
 
class InnerNode implements Node {
    final ImmutableList<Node> children;
 
    public InnerNode(ImmutableList<Node> children) {
        assert children.size() > 0;
        this.children = children;
    }
}
 
class MarkerNode implements Node {
    final Node child;
 
    public MarkerNode(Node child) {
        this.child = child;
    }
}

~~DISCUSSION:ON~~

courses/b6b36omo/en/hw/10/start.txt · Last modified: 2018/10/03 11:13 (external edit)