The answer depends on assumptions on <code>plaintext</code>.

If an adversary can enumerate the possible <code>plaintext</code> (e.g. if <code>plaintext</code> is a password, mediocre passphrase, or a published file) then **yes**: knowledge of <code>h1</code> _or_ <code>h2</code> allows finding what <code>plaintext</code> is, by verifying beyond reasonable doubt an hypothesis made.

If <code>plaintext</code> can't be guessed (e.g has 128 bits of entropy), then we are safe for some strong enough hypothesis on <code>H</code> that <code>SHA-256</code> may meet.. or perhaps not. As pointed in another answer, we'd have the HMAC security argument if we used

    h1 = HMAC( Hash=SHA-256, Key=root, Message=salt1 )
    h2 = HMAC( Hash=SHA-256, Key=root, Message=salt2 )