
public class Node {
    private String str;
    private String operator;
    private Integer level;
    private Integer nomor;
    private Node parent;

    public Node(String str, String operator, Integer level, Integer nomor, Node parent) {
        this.str = str;
        this.operator = operator;
        this.level = level;
        this.nomor = nomor;
        this.parent = parent;
    }

    public String getStr() {
        return str;
    }

    public String getOperator() {
        return operator;
    }

    public Integer getLevel() {
        return level;
    }

    public Integer getNomor() {
        return nomor;
    }

    public Node getParent() {
        return parent;
    }

    @Override
    public String toString() {
        java.util.List<Node> chain = new java.util.ArrayList<>();
        Node current = this;
        while (current != null) {
            chain.add(current);
            current = current.parent;
        }
        java.util.Collections.reverse(chain);

        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < chain.size(); i++) {
            Node n = chain.get(i);
            if (i > 0) {
                sb.append("\n");
                for (int j = 0; j < i; j++) {
                    sb.append("  ");
                }
                sb.append("\\_");
            }
            sb.append("Node{str=").append(n.str)
              .append(", operator=").append(n.operator)
              .append(", level=").append(n.level)
              .append(", nomor=").append(n.nomor);
            if (n.parent == null) {
                sb.append(", parent=null");
            }
            sb.append("}");
        }
        return sb.toString();
    }
}