【5 树与二叉树】二叉排序树删除值小于等于x的结点。

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的结点。_第1张图片

你可能感兴趣的:(5,树与二叉树,算法)