删除节点后,取其左子树的最大元素填充该节点,留下的空缺由它的下层元素填充。 如果无左子树,则直接用右孩子填充。 删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; }
温馨提示:答案为网友推荐,仅供参考