Siêu Nhân Toán Học
Senior Member
C++:
void Remove(BST *pRoot, int data)
{
if(pRoot == NULL)
{
return;
}
if(data > pRoot->key)
Remove(pRoot->pRight,data);
else if(data < pRoot->key)
Remove(pRoot->pLeft,data);
else
{
// Node lá -> xóa trực tiếp
if(pRoot->pLeft == NULL && pRoot->pRight == NULL)
{
BST *p = pRoot;
free(p);
}
// Node có 1 con trái hoặc phải -> Thay đổi giá trị của node cần xóa với node con, sau đó xóa node con
else if(pRoot->pRight == NULL)
{
BST *p = pRoot->pLeft;
*pRoot = *p;
free(p);
}
else if(pRoot->pLeft == NULL)
{
BST *p = pRoot->pRight;
*pRoot = *p;
free(p);
}
// Node có 2 con -> Tìm node nhỏ nhất bên cây con phải, hoán đổi giá trị với node cần xóa sau đó gọi đệ quy xóa node nhỏ nhất
else
{
BST *p = minValueNode(pRoot->pRight);
pRoot->key = p->key;
Remove(pRoot->pRight, p->key);
}
}
}
Các bác cho hỏi: em đang viết hàm xóa node có giá trị bất kì trong cây nhị phân: node 1 con, node 2 con, node lá. Nhưng không hiểu sao khi debug thì nó cứ báo lỗi segment fault. Chạy trên compiler online thì nó lại thay mấy cái giá trị rác vô node cần xóa. Code trên của em có lỗi ở chỗ nào không ạ?
Sửa lần cuối:




