@Override
    public boolean equals( Object o ) {
        if ( this == o ) return true;
        if ( o == null || getClass() != o.getClass() ) return false;

        Node node = (Node) o;

        if ( children != null ? !children.equals( node.children ) : node.children != null ) return false;
        if ( valueToken != null ? !valueToken.equals( node.valueToken) : node.valueToken != null ) return false;

        return true;
    }