I think the sparse tree type you are interested in is not build into Org
mode.
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
that.
(defun org-todo-subtree-p ()
"Return non-nil if in or below a todo subtree else return nil.
Only works on headlines."
(save-excursion
(cl-labels ((internal-subheading-todo-p
()
(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))
(org-up-heading-all 1)
(internal-subheading-todo-p))))))
(internal-subheading-todo-p))))
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."
(interactive)
(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.
C-c / m TODO=""
should work but my org-sparse-tree fu is weak: I don't get the result I expect, but I don't get the result I expect withC-c / t
either. I'm probably doing something wrong.