二叉树

来源:互联网 发布:mac tensorflow 安装 编辑:程序博客网 时间:2024/05/17 07:07
#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 clear(){clear(rp);n=0;}~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;}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;}int size()const{return n;}void update(const T& olddata,const T& newdata){if(remove(olddata)) insert(newdata);}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){//返回以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);}};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();b.update('b','k');b.update('k','b');b.update('x','*');b.travel();while(!b.empty()) b.remove(b.root());cout<<"size:"<<b.size()<<endl;b.travel();}

0 0
原创粉丝点击