typedef struct BSTNode{
int key;
struct BSTNode *lchild,*rchild;
}BSTNode,*BSTree;
void delx(BSTree &T,int x){
BSTNode *p=T,*q;
while(T&&T->key<=x){ //让根节点的值大于x
p=T;
T=T->lchild;
p->rchild=null;
free(p);
}
q=p;
p=q->lchild;
while(p){ //p为工作指针,<=要删除的
while(p&&p->key>x){ //左子树值>x,再看下层左子树
q=p;
p=p->lchild;
} //直到左子树值<=x
if(p){ //而p的右子树待定
q->lchild=p->rchild;//q左指向p的右子树
p->rchild=null;
free(q); //p及左子树删除
}
p=q->lchild; //判断q的新左子树
}
}
【5 树与二叉树】二叉排序树删除值小于等于x的结点。
于 2023-11-28 15:49:44 首次发布