好心人帮帮忙,关于HashMap 1.8源码中removeTreeNode的问题

前提条件:if (pl != null && pr != null){}

问题一: 请问什么情况下不满足 if((p.parent == sp) != null){} ?

问题二:请问什么情况下不满足 if(s == sp.left){} ?

if (pl != null && pr != null) {
        TreeNode<K,V> s = pr, sl;
        while ((sl = s.left) != null) // find successor
            s = sl;
        boolean c = s.red; s.red = p.red; p.red = c; // swap colors
        TreeNode<K,V> sr = s.right; 
        TreeNode<K,V> pp = p.parent; 
        if (s == pr) {
            p.parent = s; 
            s.right = p; 
        } 
        else {
            TreeNode<K,V> sp = s.parent; 
            if ((p.parent = sp) != null) {
                if (s == sp.left) 
                    sp.left = p; 
                else
                    sp.right = p; 
            }

 

好像没有这种情况,我也不知道为甚这么写。

我看里面有不少多余的判断,有的比较隐晦,而有好几个编辑器都能直接推断出来,所以应该是冗余,没啥用的