プロが教えるわが家の防犯対策術!

2分探索木のアルゴリズムに関する問題について質問させていただきます。

[問題]

集合Sに対する2文探索木とは、ラベルつきの2分木で、
その頂点vにはSのある要素l(v)がラベルとしてつけられている。
l(v)は次の性質を満たす。

1.vの左部分木の頂点uに対して l(u) < l(v)
2.vの右部分木の頂点uに対して l(u) > l(v)
3.Sの任意の要素aに対して l(v) = a となる頂点vはちょうどひとつある。

図はキーワード集合{begin,else,end,if,then}をあらわす2分探索木の例である。
いま、集合Sを表す2分探索木と要素aが与えられているときa∈Sならば"はい"、
そうでなければ"いいえ"を出力するアルゴリズムを考える。
このアルゴリズムは、木の根rについて一回だけ再帰手続きSEARCH(a,r)を呼び出せばよい。
ただし、SEARCH(a,v)はvを根とする部分木中に要素aが含まれているかを判定する。
含まれているときに値"はい"を、そうでなければ値"いいえ"を返す。

・アルゴリズム

procedure SEARCH(a,v):
if a = l(v) then return "はい"
else
if a < l(v) then
if vが左の子wを持つ then return SEARCH( ア )
else return "いいえ"
else


以下の問題に答えよ。

(1) 上のアルゴリズムのア,イを埋めよ。
(2) 上のアルゴリズムを参考にして、集合Sからのデータの削除DELETE(a,S)を考える。
削除すべき要素aが頂点vのラベルであったとする。そのとき次の3つの場合について、行うべき操作を記述せよ。
(i) 頂点vが葉である (ii) 頂点vの子が1個ある (iii) 頂点vの子が2個ある

以上です。

設問(1)は解けました。
答えは

ア: a,w
イ: a > l(v) then
if vが右の子wを持つ then return SEARCH(a,w)
else return "いいえ"

になるのではないかと思います。
設問(2)についてなのですが、それぞれの場合について、どのような操作をすればよいのかは、
参考書などを読んで理解したのですが、どのように記述したらよいかがわかりません。

長文になってしまい申し訳ないのですが、回答よろしくお願いいたします。

「アルゴリズム(2分探索木)の問題について」の質問画像

A 回答 (1件)

確かによくわからないですね。

というのは、例示されている擬似言語で書けばよさそうなのですが、擬似言語では要素の削除や移動(または複写)の方法は定義されていないようです。
擬似言語における要素の削除等を勝手に定義して擬似言語で書くか、そうでなければ言葉で説明するくらいでしょうか。(言葉での説明ならかなり書きやすいと思いますがいかがでしょうか)
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
やはりそうですよね…
この問題がどのような解答を求めているのかいまいちわかりません(汗)
言葉なら説明できそうなので、そうしたいと思います!

お礼日時:2012/08/22 22:13

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!