-3

我正在remove用 C++ 实现二叉搜索树的方法。在一种情况下,我确信这棵树node只有一个孩子:node->left或者node->right我需要修改它的父母以指向那个孩子。正如我之前提到的node->leftand node->rightare之一NULL。这是一个片段:

} 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;
  }
}

不幸的是,编译器返回一个错误。我知道这可能不是优雅的,但我只是好奇怎么做。

4

2 回答 2

6

C++ 或 C 不支持对指针的位操作。您可以将它们转换为整数,执行or,然后转换回来,但这只是自找麻烦,没有特别的收获。

改用三元表达式:

node->parent->left = node->left ? node->left : node->right;
于 2013-10-28T20:24:37.087 回答
1

我不确定这会实现你想要的。将其他两个指针的按位或结果分配给您的指针将产生一个指向谁知道在哪里的指针。

我认为您正在寻找的是这样的:

} else { // One children
  if (node->parent->left == node) {
    node->parent->left = node->left != null ? node->left : node->right;
    node->parent->left->parent = node->parent;
  } else {
    node->parent->right = node->left | node->right;
    node->parent->right->parent = node->parent;
  }
}
于 2013-10-28T20:25:39.553 回答