i'm a rookie in data structures.今上机实习二叉排序树一章向大家汇报。

drmao 2003-10-26 09:23:21
#include <iostream.h>
#include <stdio.h>
#include <stdlib.h>
#define StaElem BiTree
#define Status int
#define BiTElem int
////////////////////////////////////////////////////
typedef struct BiTNode{
BiTElem data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
//////////////////////////////////////////////
Status PreOrderCreatBiTree(BiTree &t){
//cout<<"\nPreOrderCreatBiTree(BiTree &t)\n";
BiTElem input; cin>>input;
if(input==0)t=0;
else { t=(BiTree)malloc(sizeof(BiTNode));
t->data=input;
PreOrderCreatBiTree(t->lchild); PreOrderCreatBiTree(t->rchild);
} return 1;
}
///////////////
Status PreOrderTraverse(BiTree &t){//cout<<"\nInOrderTraverse(BiTree &t)\n";
if(t){cout<<" "<<t->data<<" ";
PreOrderTraverse(t->lchild);PreOrderTraverse(t->rchild);}
return 1;
}///////////////
Status PostOrderTraverse(BiTree &t){//cout<<"\nInOrderTraverse(BiTree &t)\n";
if(t){PostOrderTraverse(t->lchild);
PostOrderTraverse(t->rchild);
cout<<" "<<t->data<<" ";
return 1;}
return 0;
}///////////////
Status InOrderTraverse(BiTree &t){//cout<<"\nInOrderTraverse(BiTree &t)\n";
if(t){
InOrderTraverse(t->lchild);
cout<<" "<<t->data<<" ";
InOrderTraverse(t->rchild);
} return 1;
}///////////////
Status SearchBST(BiTree T,BiTElem data,BiTree f,BiTree &p){
if(!T){p=f;return 0;}
else if( data==T->data ){p=T;return 1;}
else if(data<T->data)SearchBST(T->lchild,data,T,p);
else SearchBST(T->rchild,data,T,p);
}////////////////////////////////////////////////////////////////
Status InsertBST(BiTree &T,BiTElem data){BiTree p,s;
if(!SearchBST(T,data,0,p)){ s=(BiTree)malloc(sizeof(BiTNode));
s->data=data; s->lchild=s->rchild=0;
if(!p) T=s;
else if(data<p->data)p->lchild=s;
else p->rchild=s;
return 1;
} return 0;
}/////////////////////////////////////////////////////
Status Delete(BiTree &p){BiTree q=0,s=0;
if(!p->lchild){q=p;p=p->rchild;delete q; return 1;}
if(!p->rchild){q=p;p=p->lchild;delete q; return 1;}
q=p; s=q->lchild;
while(s->rchild){q=s;s=s->rchild;}
p->data=s->data;
if(p==q)p->lchild=s->lchild;
else q->rchild=s->lchild;
return 1;
}////////////////////////////////////////////////
Status DeleteBST(BiTree &T,BiTElem data){
if(T){
if(T->data==data)Delete(T);
else if(data<T->data)DeleteBST(T->lchild,data);
else DeleteBST(T->rchild,data);
return 1;
}
else return 0;
}/////////////////////////////////
Status ThreeKindOfTraverse(BiTree &tree){cout<<"\n";
PreOrderTraverse(tree);cout<<"\n";
InOrderTraverse(tree);cout<<"\n";
PostOrderTraverse(tree);cout<<"\n";return 1;
}//////////////////////////////////////////////////////
int main(){BiTree tree=0; int i=0; BiTElem input;
while(1){cin>>input; if(!input)break;
InsertBST(tree,input); }
ThreeKindOfTraverse(tree);
while(1){cin>>input; if(!input)break;
DeleteBST(tree,input); }
ThreeKindOfTraverse(tree);
return 1;
}
...全文
35 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

33,010

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧