二叉查找树

BSTNode * Minimum(BSTNode * node){
	while(node->kid[0]!=nil)
		node=node->kid[0];
	return node;
}
BSTNode * Maxmum(BSTNode * node){
	while(node->kid[1]!=nil)
		node=node->kid[1];
	return node;
}
BSTNode * Search(BSTNode * node,Int val){                   // < CLRS
	if(node==nil || val==node->val) return node;
	if(val<node->val) return Search(node->kid[0],val);
	else return Search(node->kid[1],val);
}

 

BSTNode * Successor(BSTNode * node){ if(node->kid[1]!=nil) return Minimum(node->kid[1]); BSTnode *p=node->pa; while(p!=nil && p->val<node->val) p=p->pa; return p; } BSTNode * predecessor(BSTNode * node){ if(node->kid[0]!=nil) return Maxmum(node->kid[0]); BSTnode *p=node->pa; while(p!=nil && p->val>node->val) p=p->pa; return p; }

 

void Insert(BSTree *root,int val){
	if(root==NULL){
		root=new BSTNode();
		root->val=val;
		return;
	}
	BSTNode *p=root;
	while(val<p->val && p->lhd!=NULL) p=p->lhd; 
	while(val>p->val && p->rhd!=NULL) p=p->rhd;
	if(val<p->val){ p->lhd=new BSTNode(); p->lhd->val=val; }
	else if(val>p->val){ p->rhd=new BSTNode(); p->rhd->val=val; }
	else p->cnt++;
}
void Insert(BSTNode * pos,Int val){  // CLRS
	if(pos==nil)
	{ Initnode(pos,val); return; }
	BSTNode * node=new BSTNode();
	InitNode(node,val,1);
	BSTNode *p=pos;
	while(p->val!=val){
		if(val<p->val){
			if(p->kid[0]!=nil){ p=p->kid[0]; continue;
			p->kid[0]=node; node->pa=p; return;
		}else if(val>p->val){
			if(p->kid[1]!=nil){ p=p->kid[1]; continue;
			p->kid[1]=node; node->pa=p; return;
		}
	}
	p->cnt++;
}
BSTNode * Search(BSTNode * node,Int val){
    while(node!=nil && val!=node->val){
        if(val<node->val) node=node->kid[0];
        else node=node->kid[1];
    }
    return node;
}
void Query(BSTree *root,int val){
	BSTree *p=root;
	while(p->val!=val){
		if(val<p->val){
			if(p->lhd==NULL) return false;
			p=p->lhd; continue;
		}
		if(val>p->val){
			if(p->rhd==NULL) return false;
			p=p->lhd; continue;
		}  
	}
	return true;
}
void Delete(BSTree *root,int val){
	BSTree *p=root;
	while(p->val!=val){
		if(val<p->val){
			if(p->lhd==NULL) return false;
			p=p->lhd; continue;
		}
		if(val>p->val){
			if(p->rhd==NULL) return false;
			p=p->lhd; continue;
		}  
	}
	// ..............	
}

 

posted on 2013-08-13 20:23  Amyc  阅读(183)  评论(0编辑  收藏  举报