まずは列に関する同等の問題を解く。つまり、区間の総XORがXになるような区間の総数を求める問題を考える。頂点を0-basedで与えて0,1,...,N−1とし、区間[0,k)の総XORをS[k]で表すことにする。区間[l,r)の総XORはS[r]⊕S[l]と書けて、これがXに等しいという条件を整理すると
S[l]=S[r]⊕X
となる。つまり、r=0から順に、S[r]⊕Xに等しいようなS[i],i∈[0,r)が何個あるか数えればよくて、これはハッシュテーブルなどにS[i]の出現回数を記録していけばO(N)でできる。
木に関してもオイラーツアーを考えれば同じようにできるが、列の場合の方針をそのまま適用すると、同じ頂点を重複して数えることになってしまう。対処は簡単で、pre-orderに対応するものだけ数えるとか決めておけばよい。