For the tree:
a
+-- b
| +-- c
| +-- d
| | +-- e
| +-- f
+-- x
| +-- y
| +-- z
+-- p
+-- q
To turn it into:
a
+-- b'
| +-- c'
| +-- d
| | +-- e'
| +-- f
+-- x
| +-- y'
| +-- z
+-- i
+-- j
That is, update b, c, e, and y, but not d, x, or z, and remove p and q, and add i and j.
The Diff set looks like:
+-- b (change)
| +-- c (change)
| +-- e (change)
+-- y (change)
+-- p (remove)
+-- i (add)
+-- j (add)
Each Diff node has a reference to the actual and ideal node that it refers
to, and a list of each leaf diff object under its tree, and a list of
each ideal tree node that isn't changing.