二叉平衡树的指针问题
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;
}
如图,如果我想要删除14结点
else{
TmpCell = T;
if(T->LeftChild = NULL) T= T->RightChild;
if(T->RightChild = NULL) T=T->LeftChild;
free(TmpCell);
}
当我找到14结点时, T=T->LeftChild; T变为它的左儿子13,TmpCell仍然是14结点,然后我free了TmpCell,就等于释放了14结点,14结点的父节点并没有链接13结点,但是为什么遍历时13结点也能输出。虽然这么写满足了需求,但是这里不太懂,希望解答下,谢谢。
T->RightChild = Delete(T->data, T->RightChild);
还有这句代码的效率比较低,请问怎么改正。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)