#include #include using namespace std; typedef int 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){} }; Node *rp; int n; public: bst():rp(),n(){} void insert(Node* &t,Node *p)//插入节点 { if(t==NULL) t=p; else if(p->datadata) insert(t->L,p); else insert(t->R,p); } void insert(const T&d){insert(rp,new Node(d));} Node *&find(Node *&t,const T&d)//查找指定元素 { if(t==NULL) return t; else if(d==t->data) return t; else if(ddata) return find(t->L,d); else return find(t->R,d); } Node *&find(const T&d){return find(rp,d);} void remove(const T&d)//删除节点 { Node *&t=find(d); if(t==NULL) return; Node *p=t; if(t->L!=NULL) insert(t->R,t->L); t=t->R; delete p; } void clear(Node *&t)//清空二叉树 { if(t!=NULL) { clear(t->L); clear(t->R); delete t; t=NULL;//注意这里t要置空,否则输出时会是随机数 } } void clear(){clear(rp);} int high(Node *t)//求树的高度 { if(t==NULL) return 0; int lh=high(t->L); int rh=high(t->R); return 1+(lh>rh?lh:rh); //每次通过这里不断的累加树的高度 } int high(){high(rp);} T &root()//查找根节点 { if(rp==NULL) throw "空"; return rp->data; } void update(const T&olddata,const T&newdata)//更新一棵树 { remove(olddata); insert(newdata); } void travel(Node *t)//遍历整棵树 { if(t!=NULL) { travel(t->L); cout<data<<' '; travel(t->R); } } void travel(){travel(rp);cout<data<R,space+2,'\\'); //cout<data<L,space,'/'); //print(t->R,space+3,'\\'); } void print(){print(rp,6,'*');} }; int main() { bst b; b.insert(5); b.insert(3); b.insert(9); b.insert(4); b.insert(1); b.travel(); cout<<"树的高度为:"<