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;
    		}  
    	}
    	// ..............	
    }
    
  • 相关阅读:
    让你提升命令行效率的 Bash 快捷键
    关于jquery源码中undefined作为参数的理解
    前端手机抓包流程(window)
    前端开发--环境配置
    Code Review的人理解
    JS 组件化开发 系列(一)
    mac 安装sass时遇到gem 的镜像错误
    SpringBoot 整合mybatis
    项目知识点完善
    学习过程京东注册的静态界面
  • 原文地址:https://www.cnblogs.com/amyc/p/BSTNotes.html
Copyright © 2011-2022 走看看