将指针指向两个指针的按位OR

kee*_*imi -3 c c++ pointers

我正在remove用C++ 实现二进制搜索树的方法.在其中一个案例中,我确信树node只有一个孩子:node->left或者node->right我需要修改它的父母指向那个孩子.正如我的一个前面提到的node->leftnode->rightNULL.这是一个片段:

} else { // One children
  if (node->parent->left == node) {
    node->parent->left = node->left | node->right;
    node->parent->left->parent = node->parent;
  } else {
    node->parent->right = node->left | node->right;
    node->parent->right->parent = node->parent;
  }
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,编译器返回错误.我知道它可能不是优雅的但我只是好奇如何去做.

Mar*_*som 6

C++或C不支持对指针进行位操作.您可以将它们转换为整数or,然后转换回来,但这只是为了没有特别的收益而烦恼.

改为使用三元表达式:

node->parent->left = node->left ? node->left : node->right;
Run Code Online (Sandbox Code Playgroud)