コードは次のようになります。
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)
。そうでない場合、なぜですか?