B: Binary Search Tree II に、delete 命令を追加し、二分探索木 $T$ に対し、以下の命令を実行するプログラムを作成してください。
二分探索木 $T$ から与えられたキー $k$ を持つ節点 $z$ を削除する delete k は以下の3つの場合を検討したアルゴリズムに従い、二分探索木条件を保ちつつ親子のリンク(ポインタ)を更新します:
入力の最初の行に、命令の数 $m$ が与えられます。続く$m$ 行目に、insert $k$、find $k$、delete $k$または print の形式で命令が1行に与えられます。
find $k$ 命令ごとに、$T$ に $k$ が含まれる場合 yes と、含まれない場合 no と1行に出力してください。
さらに print 命令ごとに、中間順巡回アルゴリズム、先行順巡回アルゴリズムによって得られるキーの順列をそれぞれ1行に出力してください。各キーの前に1つの空白を出力してください。
18 insert 8 insert 2 insert 3 insert 7 insert 22 insert 1 find 1 find 2 find 3 find 4 find 5 find 6 find 7 find 8 print delete 3 delete 7 print
yes yes yes no no no yes yes 1 2 3 7 8 22 8 2 1 3 7 22 1 2 8 22 8 2 1 22
Introduction to Algorithms, Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, and Clifford Stein. The MIT Press.