В качестве собственного варианта могу предложить вам, например, сделать представление дерева в виде списка(просто последовательный обход всех вершин), а потом применить к этому списку обычный diff.
Вообще говоря никак. Можно попробовать как написал jov выше, но, если я не ошибаюсь, то при удалении контекста канвы пропадает сохраненная ImageData, а без пересоздания контекста канвы изменить размеры нельзя.