コードは次のようになります。
void insertNode(TreeNode **root, COMPARE compare, void* data) {
TreeNode *node = (TreeNode *)malloc(sizeof(TreeNode));
node->data = data;
node->left = NULL;
node->right = NULL;
if(*root == NULL) {
*root = node;
return;
}
while(1){
if(compare((*root)->data, data) > 0) {
if((*root)->left != NULL) {
*root = (*root)->left;
} else {
(*root)->left = node;
break;
}
} else {
if ((*root)->right != NULL) {
*root = (*root)-> right;
} else {
(*root) -> right = node;
break;
}
}
}
}
ポインターは のようrootに使用されることはなく、常に として使用され(*root)ます。TreeNode **root冗長ではないですか?TreeNode *root関数本体の引数 と の部分を から だけに変更できますrootか(*root)。そうでない場合、なぜですか?