包含了二叉搜索树的插入,删除,查找,中序遍历,找最大值最小值的操作,代码中有注释。
/*Keep on going Never give up*/ //#pragma GCC optimize(3,"Ofast","inline") #include <bits/stdc++.h> using namespace std; struct Node{ int data; Node *l,*r,*parent; }; //由大到小排序(中序遍历二叉树) void sortx(Node *rt){ if(rt==NULL) return; sortx(rt->l); cout<<rt->data<<endl; sortx(rt->r); } //插入结点 Node* insert(Node* rt,int val){ if(!rt){ //若原树为空,生成并返回一个结点的二叉搜索树 rt=new Node; rt->data=val; rt->r=rt->l=NULL; } else{ //开始找要插入元素的位置 if(val<rt->data) rt->l=insert(rt->l,val); //递归左子树 else if(val>rt->data) rt->r=insert(rt->r,val); //递归右子树 } return rt; } //找出val的结点 Node* ifind(Node *rt,int val){ while (rt!=NULL&&rt->data!=val){ if(val<rt->data) rt=rt->l; else rt=rt->r; } return rt; } //找出最大值 Node* imax(Node *rt){ while (rt->r!=NULL) rt=rt->r; return rt; } //找出最小值 Node* imin(Node *rt){ while (rt->l!=NULL) rt=rt->l; return rt; } //删除给定结点 Node* del(Node *rt,int val){ Node *temp=new Node; if(!rt) cout<<"元素未找到"<<endl; else{ if(val<rt->data) rt->l=del(rt->l,val); /* 从左子树递归删除 */ else if(val>rt->data) rt->r=del(rt->r,val);/* 从右子树递归删除 */ else{ if(rt->l&&rt->r){ //分情况删除 temp=imin(rt->r); rt->data=temp->data; rt->r=del(rt->r,rt->data); } else{ temp=rt; if(!rt->l) rt=rt->r; else rt=rt->l; } free(temp); } } return rt; } int main() { int a[10]={5,6,8,2,3,7,4,1,5,77}; Node *root=NULL; for(int i=0;i<10;i++) root=insert(root,a[i]); root=del(root,7); sortx(root); return 0; }