求助-关于删除结点的问题拜托各位大神

为什么不管在顺序表还是链表或者其他存储结构中删除某个结点的函数中都带有一个接收该结点值的指针类型的参数呢?换句话说就是:为什么要先保存预删除结点的值再释放该结点的内存呢?既然要删除又保留其值有什么用啊?又为什么要用指针保存呢?如下:int dellist(sqllist*L elemtype *e){…… *e=要删除结点的值; …… 释放该结点空间;}先在次谢谢各位大神!

删除节点后,取其左子树的最大元素填充该节点,留下的空缺由它的下层元素填充。 如果无左子树,则直接用右孩子填充。 删30: 60 / \ 20 80 \ \ 40 90 / / 35 85 / \ 32 88 删80: 60 / \ 30 90 / \ / 20 40 85 / \ 35 88 / 32 删60: 40 / \ 30 80 / \ \ 20 35 90 / / 32 85 \ 88 实现上述二叉搜索树删除操作的函数为: BSTree Delete( ElementType x,BSTree t) { Position TmpCell; if(t==NULL) Error("要删除的元素x未找到"); else if(x<t->element) /*Go left */ t->left=Delete(x,t->left);/* 在左子树递归删除*/ else if(x>t->element) /*Go right */ t->right=Delete(x,t->right);/* 在右子树递归删除*/ else /*找到要删除的节点*/ if(t->left!=NULL) /*删除节点有左子树*/ { /*在左子树中找最小的元素填充删除节点*/ TmpCell=FindMax(t->left); t->element=TmpCell->element; t->left=Delete(t->element,t->left);/*在删除节点的左子树中删除最大元素*/ } else /*删除节点无左子树*/ { t=t->left; free(TmpCell); } return t; }
温馨提示:答案为网友推荐,仅供参考