当前位置:首页 > 用顺序和二叉链表作存储结构实现二叉排序树全代码
else findy(ptr->right,item); }
node* rl(){return left;} node* rr(){return right;}
void dele(node *&ptr) //删除值为item所在结点 {
if(ptr->rl()==NULL&&ptr->rr()==NULL) ptr=NULL;
else if(ptr->rr()==NULL) ptr=ptr->rl(); else
ptr=ptr->rr(); }
private: int data;
node *left; //左孩子结点 node *right; //右孩子结点 };
int main() {
int t,i=0,j;
cout<<\输入数字个数(结点个数):\ cin>>t;
cout<<\输入\个数字,数字之间用空格隔开:\ cin>>j;
node *x=new node(j); for(;i cin>>j; x->insert(x,j); } cout<<\中序遍历为:\ x->inorder(x); //作中序遍历 cout<<\输入操作(当输入-1时程序结束):\ cin>>j; while(j!=-1) { node *t=x->find(x,j); //定位结点 if(t!=NULL) { node *&y=x->findy(x,j); x->dele(y); -25- cout<<\中序遍历为:\ x->inorder(x); } else cout<<\无\ cout<<\输入操作(当输入-1时程序结束):\ cin>>j; } return 0; } -26- 顺序存储结构c #include\#include\#include\#define endflag 999999 #define N 1000 int b[N]; typedef struct { int data; int other; int flag1; }Link; void Build(Link a[N]) { int w,i,j,k; for(i=0;i<=N;i++) { a[i].flag1=0; a[i].data=0; } printf(\请输入树的根结点:\scanf(\a[1].flag1=1; printf(\请输入结点个数:\scanf(\for(j=1;j<=k;j++) { printf(\请输入结点的数值:\scanf(\ printf(\第%d位:%d\a[0].data=w; a[0].flag1=1; i=1; if(a[0].data loop:if(a[2*i].flag1==0) { a[2*i].data=a[0].data; -27- a[2*i].flag1=a[0].flag1;} if(a[2*i].flag1==1) { i=2*i; if(a[0].data if(a[0].data>a[i].data) goto loop1; } } if(a[0].data loop1:if(a[2*i+1].flag1==0) { a[2*i+1].data=a[0].data; a[2*i+1].flag1=a[0].flag1;} if(a[2*i+1].flag1=1) { i=2*i+1; if(a[0].data if(a[0].data>a[i].data) goto loop1; } } } } void Sdel(Link a[N]) { int i;int flag=0; int q;int number=1; int j=1;int b[N]; printf(\请输入需要删除的结点的数值:\scanf(\for(i=1;i<=N;i++) if(a[i].data=q) { a[i].data=0; printf(\已删除%d:\ -28-
共分享92篇相关文档