HOME»基本情報技術者試験掲示板»大原本 問52
投稿する
詳しい解説ありがとうございました。
if(Root=未定義)
Root=tmp(1)
elseif(node.data>num)
ご指摘のとおりで間違えてました
elseif(parent.data>num) です
//nodeとparentは二分探索木の要素を指すポインタ
//tmpはこの二分探索木に新たに追加する要素を指すポインタ
まだ自分自身がそう言った理解出来てないようでした。
要素を追加するプログラムと書いてあるのtmpでないと辻褄が合いませんね
大原本 問52 [5372]
まきさん(No.1)
二分木の問題で選択肢に出てくるnodeとtmpの違いが不明です。
(2)、え(3)かになる理由が分かりません
ウとオでも間違えではないのかと思いますが・・・・
(2)、え(3)かになる理由が分かりません
ウとオでも間違えではないのかと思いますが・・・・
2024.03.28 11:24
まきさん(No.2)
プログラム
Root←未定義
○treeinsert
tree : node,parent,tmp
node←Root
while((node≠未定義)and(node.data≠num)
parent←node
if(node.data>num)
node←node.left
else
node←node.right
endif
endwhile
if(node=未定義)
tmp←Tree(num)
if(Root=未定義)
Root=tmp(1)
elseif(node.data>num)
parent.left←node(2)ウ
else
parent.right←node(3)オ
endif
else
"エラー"
endif
(2)(3)で(nodeとtmpを誤解しているのでしょうか)
正解がこうなんですが、
if(Root=未定義)
Root=tmp(1)ク
elseif(node.data>num)
parent.left←tmp(2)エ
else
parent.right←tmp(3)カ
endif
Root←未定義
○treeinsert
tree : node,parent,tmp
node←Root
while((node≠未定義)and(node.data≠num)
parent←node
if(node.data>num)
node←node.left
else
node←node.right
endif
endwhile
if(node=未定義)
tmp←Tree(num)
if(Root=未定義)
Root=tmp(1)
elseif(node.data>num)
parent.left←node(2)ウ
else
parent.right←node(3)オ
endif
else
"エラー"
endif
(2)(3)で(nodeとtmpを誤解しているのでしょうか)
正解がこうなんですが、
if(Root=未定義)
Root=tmp(1)ク
elseif(node.data>num)
parent.left←tmp(2)エ
else
parent.right←tmp(3)カ
endif
2024.03.28 17:09
jjon-comさん(No.3)
★FE ゴールドマイスター
とりあえず。
★2 で node.dataの値が参照できる点が理屈に合わないです。
★2 は間違いで elseif(parent.data>num) が正しいのではないですか?
if(node=未定義) ★1
tmp←Tree(num)
if(Root=未定義)
Root=tmp(1)
elseif(node.data>num) ★2
★1 で nodeが未定義なのにtmp←Tree(num)
if(Root=未定義)
Root=tmp(1)
elseif(node.data>num) ★2
★2 で node.dataの値が参照できる点が理屈に合わないです。
★2 は間違いで elseif(parent.data>num) が正しいのではないですか?
2024.03.28 17:47
jjon-comさん(No.4)
★FE ゴールドマイスター
Root←未定義
//numという数値を二分探索木の正しい位置に追加するプログラム
○treeinsert //○treeinsert(整数型: num) が正しいはず
//nodeとparentは二分探索木の要素を指すポインタ
//tmpはこの二分探索木に新たに追加する要素を指すポインタ
tree : node,parent,tmp
node←Root
//二分探索木にnumという数値を追加する位置を探すループ。
//ループ脱出条件は「葉まで移動してもnumが見つからない」または「途中でnumが見つかった」
while((node≠未定義)and(node.data≠num)
parent←node
if(node.data>num)
node←node.left
else
node←node.right
endif
endwhile
//木の中にnumと同じ値がすでに見つかったなら"エラー"
if(node=未定義)
//見つからなければ数値numから新要素を生成。新要素を指すポインタがtmp
tmp←Tree(num)
//二分探索木が存在しない初期状態なら新要素が根(root)要素になる
if(Root=未定義)
Root=tmp
//木が存在するなら正しい大小関係になるよう新要素を二分探索木に追加する
elseif(parent.data>num) //parent.dataが正しいはず
parent.left←tmp
else
parent.right←tmp
endif
else
"エラー"
endif
//numという数値を二分探索木の正しい位置に追加するプログラム
○treeinsert //○treeinsert(整数型: num) が正しいはず
//nodeとparentは二分探索木の要素を指すポインタ
//tmpはこの二分探索木に新たに追加する要素を指すポインタ
tree : node,parent,tmp
node←Root
//二分探索木にnumという数値を追加する位置を探すループ。
//ループ脱出条件は「葉まで移動してもnumが見つからない」または「途中でnumが見つかった」
while((node≠未定義)and(node.data≠num)
parent←node
if(node.data>num)
node←node.left
else
node←node.right
endif
endwhile
//木の中にnumと同じ値がすでに見つかったなら"エラー"
if(node=未定義)
//見つからなければ数値numから新要素を生成。新要素を指すポインタがtmp
tmp←Tree(num)
//二分探索木が存在しない初期状態なら新要素が根(root)要素になる
if(Root=未定義)
Root=tmp
//木が存在するなら正しい大小関係になるよう新要素を二分探索木に追加する
elseif(parent.data>num) //parent.dataが正しいはず
parent.left←tmp
else
parent.right←tmp
endif
else
"エラー"
endif
2024.03.28 18:35
まきさん(No.5)
>jjon-comさん
詳しい解説ありがとうございました。
if(Root=未定義)
Root=tmp(1)
elseif(node.data>num)
ご指摘のとおりで間違えてました
elseif(parent.data>num) です
//nodeとparentは二分探索木の要素を指すポインタ
//tmpはこの二分探索木に新たに追加する要素を指すポインタ
まだ自分自身がそう言った理解出来てないようでした。
要素を追加するプログラムと書いてあるのtmpでないと辻褄が合いませんね
2024.03.28 20:44