BST のすべてのノードを削除するコードを作成しようとしています (各ノードには、左、右、およびデータの 3 つの属性のみがあり、親ポインターはありません)。次のコードは私が思いついたものです。ツリーの右半分のみを削除し、左半分はそのままにします。左半分も削除されるように変更するにはどうすればよいですか (したがって、最終的には、左サブツリーも右サブツリーも持たないルート ノードのみが残ります)。
def delete(root):
    global last
    if root:
     delete(root.left)
     delete(root.right)
     if not (root.left or root.right):
        last = root
     elif root.left == last:
        root.left = None
     else:
        root.right = None
第二に、スタックやその他の関連するデータ構造を使用して、反復的なアプローチを提案できる人はいますか?