次のC言語のプログラムでは、2分探索木を用いて探索を行う。(ア)、(イ)に入る正しい組合せを@〜Dの中から選べ。ただし、各ノードの left が指す部分木に格納されている key の値はそのノードの key の値より小さいものとする。
struct node {
int key;
struct node *left, * right;
} tree ;
struct node *search(struct node *tree, int key) {
if (tree == NULL) return NULL;
if (key == tree->key) return tree;
if (key < tree->key)
return (ア) ;
else
return (イ) ;
}
ア イ
@ search(tree->left) NULL
A search(tree, key) search(tree->left, key)
B search(tree->left, key) search(tree, key)
C search(tree->right, key) search(tree->left, key)
D search(tree->left, key) search(tree->right, key)
D
(ア) は、key と 2分木のノードの値を比較して key の方が小さい場合に実行されるため、 題意より left が指す部分木を再帰的に検索する。
従って、search(tree->left, key) が入る。
(イ) は、key と2分木のノードの値を比較して key の方が大きい場合に実行されるため、題意より right が指す部分木を再帰的に検索する。
従って、search(tree->right, key) が入る。
W−1 | 目次 | W−3 |