所以我在插入新树后实现了Splay功能。但是,当我尝试插入多个int时,它会显示Segmentation Fault(核心转储),然后退出。
任何人都可以查看我的问题所在吗?
void SplayTree::splay(Node* node)
{
if (node == NULL)
return;
while (node!=NULL) {
Node* parent = node->parent;
if (parent != NULL) {
if (parent->left == node) {
rightRotate(parent);
} else {
leftRotate(parent);
}
} else {
Node* gparent = parent->parent;
if (parent->left == node && gparent->left == parent) {
rightRotate(gparent);
rightRotate(node->parent);
} else if (parent->right == node &&
gparent->right == parent) {
leftRotate(gparent);
leftRotate(node->parent);
} else if (parent->left == node &&
gparent->right == parent) {
rightRotate(parent);
leftRotate(node->parent);
} else {
leftRotate(parent);
rightRotate(node->parent);
}
}
}
}
答案 0 :(得分:4)
在第15行,你基本上有以下代码序列:
if (parent != NULL) {
...
} else {
Node* gparent = parent->parent;
所以基本上你要检查parent
是不是NULL
,如果它是NULL
你立即推崇它(parent->parent
),你基本上是这样做的:
Node* parent = NULL; *parent;
哪个是UB,很可能导致段错误。
还有一系列其他引用的parents
,所以我认为你需要重新思考你的功能如何运作。