zoukankan      html  css  js  c++  java
  • 二叉查找树

    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;
    		}  
    	}
    	// ..............	
    }
    
  • 相关阅读:
    Hadoop 组成
    umlの活动图
    一种基于ES5的JavaScript继承
    Unity3.x游戏开发经典教程 书例 100%完毕~
    AndroidMainifest标签使用说明1——&lt;action&gt;
    JS图片自己主动轮换效果实现
    现有一些开源ESB总线的比較
    安装程序不能验证Update.inf文件的完整性,请确定加密服务正在此计算机上执行
    leetCode解题报告5道题(九)
    浅谈C++多态性
  • 原文地址:https://www.cnblogs.com/amyc/p/BSTNotes.html
Copyright © 2011-2022 走看看