平成17年度 技術士第一次試験問題【専門科目】
【16】情報工学部門
W−5
変数 root は次の図にある二分木の根を参照している。この二分木を次の
C言語の関数で探索する。なお、構造体のメンバleft と right が0のときは
子がないものとする。search(root, 34) という引数で関数を呼出し、終了した
場合の変数 count の値を選べ。

struct nodes { int value; struct nodes *right, *left; };
typedef struct nodes *Node;

int count = 0;

int search ( Node node, int value ) {
 count ++;
 if (node->value == value) return 0;
 if (node->right != 0 && search (node->right, value)== 0)
  return 0;
 if (node->left != 0 && search (node->left, value) == 0)
  return 0;
 return -1;
}
 


 @ 1  A 2  B 4  C 6  D 8



【正解】 C

1回目:search(root, 34) で呼び出した時、
node->value = 29, node->right = 45, node->left = 82である。
if (node->right != 0 && search (node->right, value)== 0) により、
search(45, 34) を呼び出し。

 
2回目:search(45, 34) で呼び出した時
 node->value = 45, node->right = 82, node->left = 34である。
 if (node->right != 0 && search (node->right, value)== 0) により、
 search(82, 34) で呼び出し。


  
3回目:search(82, 34) で呼び出した時
  node->value = 82, node->right = 56, node->left = 19である。
  if (node->right != 0 && search (node->right, value)== 0) により、
  search(56, 34) で呼び出し。


   
4回目:search(56, 34) で呼び出した時
   node->value = 56, node->right = 0, node->left = 0である。
   return値 -1で返る。


  
if (node->left != 0 && search (node->left, value) == 0) により、
  search(19, 34) で呼び出し。

  
 5回目:search(19, 34) で呼び出した時
   node->value = 19, node->right = 0, node->left = 0である。
   return値 -1で返る。


  
return値 -1で返る。

 if (node->left != 0 && search (node->left, value)== 0) により、
 search(34, 34) で呼び出し。


  6回目:search(34, 34) で呼び出した時
  node->value = 34, node->right = 0, node->left = 0である。
  if (node->value == value) return 0; により、return値 0 で返る。

if (node->right != 0 && search (node->right, value)== 0) より
return値 0で返る。


従って6回


EXCELのマクロのご相談なら ファーストマクロ 



W−4 目次 W−6
ファーストマクロ TOPページ