Delete(key, T){
BstTree TmpCell; //one tree node
if(T == NULL)
return Not Found;
else if(key < T->data)
T->LeftChild = Delete(key, T->LeftChild);
else if(key > T->data)
T->RightChild = Delete(key, T->RightChild);
else if(T->LeftChild&& T->RightChild){
TmpCell = Findmin(T->RightChild);
T->data = TmpCell->data;
T->RightChild = Delete(T->data, T->RightChild);
}
else{
TmpCell = T;
if(T->LeftChild = NULL) T= T->RightChild;
if(T->RightChild = NULL) T=T->LeftChild;
free(TmpCell);
}
return T;
}
我在“C中的数据结构和算法分析”中找到了代码。
如果我想删除14
else{
TmpCell = T;
if(T->LeftChild = NULL) T = T->RightChild;
if(T->RightChild = NULL) T =T->LeftChild;
free(TmpCell);
}
在我找到14之后,T(14)移动到T的LeftChild(13),但是TmpCell仍然指向14,然后我释放它。但是当我输出Tree时,它输出13,那么13如何连接到14的父级?
答案 0 :(得分:1)
当Delete
的返回值被分配给某个东西时,就会出现“连接”部分,即在行中
T->LeftChild = Delete(key, T->LeftChild);
和
T->RightChild = Delete(key, T->RightChild);
在函数本身及其调用者中:
myTree = Delete(x, myTree);
(这就是你应该怎么称呼它。)