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
第二に、スタックやその他の関連するデータ構造を使用して、反復的なアプローチを提案できる人はいますか?