投稿する

大原本  問52 [5372]

 まきさん(No.1) 
二分木の問題で選択肢に出てくるnodeとtmpの違いが不明です。
(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
2024.03.28 17:09
jjon-comさん(No.3) 
FE ゴールドマイスター
とりあえず。
if(node=未定義) ★1
  tmp←Tree(num)
  if(Root=未定義)
    Root=tmp(1)
  elseif(node.data>num) ★2
★1 で nodeが未定義なのに
★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
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

返信投稿用フォーム

スパム防止のためにスレッド作成日から30日経過したスレッドへの書込みはできません。
© 2010-2024 基本情報技術者試験ドットコム All Rights Reserved.

Pagetop