import java.util.ArrayList; import java.util.List; import java.util.Map; public class Node { private String value; private List subNodes; public Node(String value) { this.value = value; this.subNodes = new ArrayList<>(); } public String getValue() { return value; } public void setValue(String value) { this.value = value; } public List getSubNodes() { return this.subNodes; } public boolean addSubNode(Node node) { return subNodes.add(node); } public boolean remSubNode(Node node) { return subNodes.remove(node); } public int getResult(Map ids) { if (subNodes.size() < 2) { try { int n = Integer.parseInt(value); return n; } catch (NumberFormatException e) { return ids.get(value); } } else { switch (value) { case "+": return subNodes.get(0).getResult(ids) + subNodes.get(1).getResult(ids); case "-": return subNodes.get(0).getResult(ids) - subNodes.get(1).getResult(ids); case "/": return subNodes.get(0).getResult(ids) / subNodes.get(1).getResult(ids); case "x": return subNodes.get(0).getResult(ids) * subNodes.get(1).getResult(ids); default: return 0; } } } public String showNode() { if (subNodes.size() < 2) { return value.toString(); } else { return "(" + subNodes.get(0).showNode() + value.toString() + subNodes.get(1).showNode() + ")"; } } }