public function compareTrees(array $previous, array $latest)
    {
        $sum = array_merge(
            array_keys($previous),
            array_keys($latest)
        );

        $sum = array_filter($sum, 'is_string');
        $sum = array_unique($sum);
        asort($sum);

        foreach ($sum as $key) {
            $old = null;
            if (isset( $previous[$key] )) {
                $old = $previous[$key];
            }

            $new = null;
            if (isset( $latest[$key] )) {
                $new = $latest[$key];
            }

            $this->handleNode($old, $new);

            if ($old && $new) {
                foreach ($old->getSubNodeNames() as $subNode) {
                    if ( ! is_array($old->$subNode)) {
                        continue;
                    }

                    $this->compareTrees($old->$subNode, $new->$subNode);
                }
            }
        }

        return null;
    }