• 二叉排序树的实现


    /*
     * bst.cpp
     *
     *  Created on: 2013年8月3日
     *      Author: 黄俊东
     *      加油,努力就会有机会。总有一天我会有章泽天那样的女朋友的。。。。。。
     */
    
    #include <iostream>
    
    using namespace std;
    
    typedef char T;
    class bst{
    	struct Node{
    		T data;
    		Node* L;
    		Node* R;
    		Node(const T& d):data(d),L(),R(){
    		}
    		Node(const T& d,Node* l , Node* r):data(d),L(l),R(r){
    		}
    	};
    
    	typedef Node* tree;
    	Node* rp;//指向根节点
    	int n;//节点个数
    
    public:
    	bst():rp(),n(){
    
    	}
    
    	void insert(tree& t,Node* p){
    		if(t == NULL){
    			t = p;
    		}else if(p->data < t->data){
    			insert(t->L,p);
    		}else{
    			insert(t->R,p);
    		}
    	}
    
    	tree& find(tree& t , const T& d){
    		if(t == NULL){
    			return t;
    		}else if(d == t->data){
    			return t;
    		}else if(d<t->data){
    			return find(t->L,d);
    		}else{
    			return find(t->R,d);
    		}
    	}
    
    	void travel(tree t)const{
    		if(t != NULL){
    			travel(t->L);
    			cout<<t->data<<' ';
    			travel(t->R);
    		}
    	}
    
    	void clear(tree t){
    		if(t!= NULL){
    			clear(t->L);
    			clear(t->R);
    			delete t;
    			t=NULL;
    		}
    	}
    
    	int high(tree t){
    		if(t == NULL){
    			return 0;
    		}
    		int lh = high(t->L);
    		int rh = high(t->R);
    		return 1+((lh>rh)?lh:rh);
    
    	}
    	void clear(){
    		clear(rp);
    	}
    
    	~bst(){
    		clear();
    	}
    
    	void insert(const T& d){
    		insert(rp,new Node(d));
    		++n;
    	}
    
    	tree& find(const T& d){
    		return find(rp,d);
    	}
    
    	void travel()const{
    		travel(rp);
    		cout<<endl;
    	}
    
    	bool empty()const{
    		return rp == NULL;
    	}
    
    	int size()const{
    		return n;
    	}
    
    	bool remove(const T& d){
    		tree& t = find(d);
    		if(t == NULL){
    			return false;
    		}
    		Node* p = t;
    		if(t->L!=NULL){
    			insert(t->R,t->L);
    		}
    		t= t->R;
    		delete p;
    		--n;
    		return true;
    	}
    
    	const T& root()const{
    		if(!rp){
    			throw "空";
    		}
    
    		return rp->data;
    	}
    
    	void update(const T& olddata , const T& newdata){
    		if(remove(olddata)){
    			insert(newdata);
    		}
    	}
    };
    
    int main(){
    	bst b;
    	b.insert('k');b.insert('s');b.insert('f');b.insert('t');
    	b.insert('a');b.insert('m');b.insert('x');b.insert('e');
    	b.insert('w');b.insert('b');b.insert('u');b.insert('j');
    	b.travel();
    
    	b.remove('k');b.remove('m');b.remove('j');b.remove('u');
    	b.travel();
    
    	while(!b.empty()){
    		b.remove(b.root());
    	}
    	cout<<"size:"<<b.size()<<endl;
    	b.travel();
    }
    


  • 相关阅读:
    POJ1222 EXTENDED LIGHTS OUT(熄灯问题)
    注解@AllArgsConstructor @NoArgsConstructor
    jwt
    校验手机号
    name* until
    java中valueof_JAVA String.valueOf()方法的用法说明(在JAVA中 BingDecime b1 = new BigDecimal(Double.toString)
    java 减法精度缺失_java double类型数据加减操作精度丢失解决方法
    java 中的Collection<? extends Object>c是什么意思
    mybatis <if test=""></if>标签0为null 无效的 踩坑
    JAVA8之妙用Optional解决判断Null为空的问题
  • 原文地址:https://www.cnblogs.com/riskyer/p/3235542.html
Copyright © 2020-2023  润新知