package mvd.jester.utils; public class BinaryDecompositionTree { private Node root; public BinaryDecompositionTree() { } public Node getRootNode() { return root; } public boolean contains(N object) { return root.contains(object); } public boolean isEmpty() { return root == null; } public void setRoot(Node root) { this.root = root; } public static class Node { private final Node parentNode; private Node leftNode; private Node rightNode; private NodeType nodeType; private T object; public Node(Node parentNode, NodeType nodeType) { this.parentNode = parentNode; this.nodeType = nodeType; } public boolean contains(T object) { if (nodeType.equals(NodeType.LEAF)) { return this.object == object; } else { boolean leftContains = false; boolean rightContains = false; if (leftNode != null) { leftContains = leftNode.contains(object); } if (rightNode != null) { rightContains = rightNode.contains(object); } return leftContains || rightContains; } } public Node(Node parentNode, T object) { this.parentNode = parentNode; this.nodeType = NodeType.LEAF; this.object = object; } /** * @return the parentNode */ public Node getParentNode() { return parentNode; } public NodeType getNodeType() { return nodeType; } public T getObject() { return object; } /** * @param leftNode the leftNode to set */ public void setLeftNode(Node leftNode) { this.leftNode = leftNode; } /** * @return the leftNode */ public Node getLeftNode() { return leftNode; } /** * @param rightNode the rightNode to set */ public void setRightNode(Node rightNode) { this.rightNode = rightNode; } /** * @return the rightNode */ public Node getRightNode() { return rightNode; } } public enum NodeType { SEQ, PAR, LEAF } }