I think the sparse tree type you are interested in is not build into Org
Core of your issue is to decide whether a headline is contained in a
todo subtree or not IIUC. You could use the following function for
(defun org-todo-subtree-p ()
"Return non-nil if in or below a todo subtree else return nil.
Only works on headlines."
(let ((el (org-element-at-point)))
(assert (eq (car el) 'headline))
(or (plist-get (cadr el) :todo-keyword)
(when (< 1 (plist-get (cadr el) :level))
Build the tree with the org-occur function which fortunately allows to
specify a callback for specifying the wanted.
(defun org-show-non-todo-tree ()
"Make a tree with headlines not in any todo subtree."
(org-occur (concat "^" org-outline-regexp " *" ) nil (lambda () (not (org-todo-subtree-p)))))
Activate the command with M-x org-show-non-todo-tree .
I guess that's it. But no guarantees, as always.