📄 subject_23921.htm
字号:
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:亮星 回复日期:2002-12-08 23:34:41
<br>内容://#ifndef NULL<BR>//const int NULL=0;<BR>//#endif //NULL<BR>//template<class T><BR>class BinTreeNode<BR>{ <BR>private:<BR> BinTreeNode *left;<BR> BinTreeNode *right;<BR>public:<BR> friend class BinTree;<BR> int data;<BR> BinTreeNode(const int & item,BinTreeNode *lptr=NULL,BinTreeNode *rptr=NULL)<BR>:<BR> data(item),left(lptr),right(rptr)<BR> {}<BR> BinTreeNode *getleft(void)const {return left;}<BR> BinTreeNode *getright(void)const {return right;}<BR>};<BR>#endif<BR>#ifndef BinTree_class<BR>#define BinTree_class<BR>#include"bintreenode.h"<BR>//template<class T><BR>class BinTree<BR>{<BR> private:<BR> BinTreeNode *root;<BR> public:<BR> int stop;<BR> BinTree():root(NULL) {}<BR> ~BinTree(void);<BR> void insert(const int & item);<BR> void preorder(BinTreeNode *currptr);<BR> BinTreeNode *getroot(void)const {return root;}<BR> friend istream & operator>>(istream & in,BinTree& Tree);<BR> BinTreeNode *findcurrent(BinTreeNode *current,const int & item);<BR> void delsubtree(BinTreeNode *current);<BR> void delsubtree(const int &item);<BR> void layerorder(BinTreeNode *current);<BR> BinTreeNode *father(BinTreeNode *current,int item); <BR> BinTreeNode *copyTree(BinTreeNode *t);<BR>};<BR>#endif<BR><BR>#include "iostream.h"<BR>#include"bintree.h"<BR>const int max=50;<BR>int front=0;<BR>int rear=0;<BR>int count=0;<BR>BinTreeNode *a[max];<BR>BinTree::~BinTree(void)<BR>{<BR> delsubtree(root);<BR>}<BR>//template<class T><BR>/*<BR>void BinTree::insert(const int & item)<BR>{<BR> BinTreeNode *currptr,*prevptr,*newNode;<BR> currptr=root;<BR> prevptr=root;<BR> while(currptr!=NULL)<BR> {<BR> if(item<currptr->data)<BR> {<BR> prevptr=currptr;<BR> currptr=currptr->left;<BR> }<BR> else<BR> {<BR> prevptr=currptr;<BR> currptr=currptr->right;<BR> }<BR> }<BR> newNode=new BinTreeNode(item,NULL,NULL);<BR> if(prevptr==NULL)<BR> root=newNode;<BR> else<BR> {<BR> if(item>prevptr->data)<BR> prevptr->right=newNode;<BR> else<BR> prevptr->left=newNode;<BR> }<BR>}*/<BR><BR>void BinTree::insert(const int & item)<BR>{<BR> static BinTreeNode *current;<BR> BinTreeNode *newnode;<BR> newnode=new BinTreeNode(item,NULL,NULL);<BR> if(root==NULL)<BR> {<BR> root=newnode;<BR> current=root;<BR> }<BR> else<BR> {<BR> a[rear]=newnode;<BR> count++;<BR> rear=(rear+1)%max;<BR> if(count!=0)<BR> {<BR> if(current->right!=NULL&&current->left!=NULL)<BR> {<BR> current=a[front];<BR> count--;<BR> front=(front+1)%max;<BR> }<BR> if(current->left==NULL)<BR> current->left=newnode;<BR> else<BR> {<BR> if(current->right==NULL)<BR> current->right=newnode;<BR> }<BR> }<BR> }<BR>}<BR><BR>//template<class T><BR>void BinTree::preorder(BinTreeNode *currptr)<BR>{<BR> if(currptr!=NULL)<BR> {<BR> cout<<currptr->data<<endl;<BR> preorder(currptr->getleft());<BR> preorder(currptr->getright());<BR> }<BR>}<BR>//template<class T><BR>istream & operator>>(istream & in,BinTree &Tree)<BR>{<BR> int item;<BR> Tree.stop=-1;<BR> cout<<"Begin to build binary tree!"<<endl;<BR> cout<<"你好!请输入一个整数,输入-1停止!"<<endl;<BR> in>>item;<BR> while(item!=Tree.stop)<BR> {<BR> Tree.insert(item);<BR> cout<<"请输入一个整数,输入-1停止!"<<endl;<BR> in>>item;<BR> }<BR> cout<<"Now stop the inputing!"<<endl;<BR> return in;<BR>}<BR>//void BinTree* layerorder(BinTreeNode *current);<BR>//{<BR>// BinTreeNode *a[<BR>BinTreeNode *BinTree::findcurrent(BinTreeNode* current,const int & item)<BR>{<BR> BinTreeNode *temp;<BR> if(current!=NULL)<BR> {<BR> if (current->data==item)<BR> {<BR> return current;<BR> }<BR> else<BR> {<BR> if((temp=findcurrent(current->left,item))!=NULL)<BR> return temp;<BR> else<BR> return findcurrent(current->right,item);<BR> } <BR> }<BR> else <BR> return NULL;<BR>}<BR>BinTreeNode * BinTree::father(BinTreeNode *current,int item)<BR>{<BR> BinTreeNode *temp;<BR> if(current==NULL)<BR> return NULL;<BR> if(current->left==findcurrent(root,item)||current->right==findcurrent(root,item))<BR> return current;<BR> if((temp=father(current->left,item))!=NULL)<BR> return temp;<BR> else<BR> return father(current->right,item);<BR>}<BR> void BinTree::delsubtree(BinTreeNode *current)<BR>{<BR> if(current!=NULL)<BR> {<BR> delsubtree(current->left);<BR> delsubtree(current->right);<BR> delete current;<BR> }<BR>}<BR>void BinTree::delsubtree(const int &item)<BR>{ <BR> BinTreeNode *current=findcurrent(getroot(),item);<BR> BinTreeNode *current1=father(getroot(),item);<BR> if(current==root)<BR> root=NULL;<BR> else<BR> {<BR> if((current1->left)->data==item)<BR> current1->left=NULL;<BR> else<BR> current1->right=NULL;<BR> delsubtree(current);<BR> }<BR>}<BR>BinTreeNode *BinTree::copyTree(BinTreeNode *t)<BR>{<BR> if(t==NULL)<BR> return NULL;<BR> BinTreeNode *newlptr,*newrptr;<BR> if(t->left!=NULL)<BR> newlptr=copyTree(t->left);<BR> else<BR> newlptr=NULL;<BR> if(t->right!=NULL)<BR> newrptr=copyTree(t->right);<BR> else<BR> newrptr=NULL;<BR> BinTreeNode *newnode;<BR> newnode=new BinTreeNode(t->data,newlptr,newrptr);<BR> return newnode;<BR>}<BR>void BinTree::layerorder(BinTreeNode *current)<BR>{<BR> front=0;<BR> rear=0;<BR> count=0;<BR> a[rear]=current;<BR> rear=(rear+1)%max;<BR> count++;<BR> while (count!=0)<BR> {<BR> current=a[front];<BR> front=(front+1)%max;<BR> count--;<BR> cout<<current->data<<endl;<BR> if(current->left!=NULL)<BR> {<BR> a[rear]=current->left;<BR> rear=(rear+1)%max;<BR> count++;<BR> }<BR> if(current->right!=NULL)<BR> {<BR> a[rear]=current->right;<BR> rear=(rear+1)%max;<BR> count++;<BR> }<BR> }<BR>}<BR><BR>#include<iostream.h><BR>#include"bintree.h"<BR>//#include"bintree.cpp"<BR>void main(void)<BR>{<BR> BinTree tree;<BR> BinTreeNode *c;<BR> cout<<"please into d/delete,p/preorder,i/insert,l/layerorder,c/copy,e/exit"<<endl;<BR> char ch;<BR> int item;<BR> cin>>ch;<BR> while(ch!='e')<BR> {<BR> switch (ch)<BR> {<BR> case 'd':cout<<"do you rearly want to delete?(y/n)"<<endl;<BR> char ch2;<BR> cin>>ch2;<BR> switch(ch2)<BR> {<BR> case 'y':cout<<"input the numeber delete"<<endl;<BR> cin>>item;<BR> cout<<"now begin delete"<<endl;<BR> tree.delsubtree(item);<BR> case 'n': ;<BR> }<BR> cout<<"please into d/delete,p/preorder,i/insert,l/layerorder,c/copy,e/exit"<<endl;<BR> cin>>ch;<BR> break;<BR> case 'p': tree.preorder(tree.getroot());<BR> cout<<"please into d/delete,p/preorder,i/insert,l/layerorder,c/copy,e/exit"<<endl;<BR> cin>>ch;<BR> break;<BR> case 'i':cout<<"input"<<endl;<BR> cin>>tree;<BR> cout<<"please into d/delete,p/preorder,i/insert,l/layerorder,c/copy,e/exit"<<endl;<BR> cin>>ch;<BR> break;<BR> case 'c':BinTreeNode *root;<BR> cout<<"now begin copy"<<endl;<BR> root=tree.copyTree(tree.getroot());<BR> tree.preorder(root);<BR> cout<<"please into d/delete,p/preorder,i/insert,l/layerorder,c/copy,e/exit"<<endl;<BR> cin>>ch;<BR> break;<BR> case 'l':tree.layerorder(tree.getroot());<BR> cout<<"please into d/delete,p/preorder,i/insert,l/layerorder,c/copy,e/exit"<<endl;<BR> cin>>ch;<BR> }<BR> }<BR>// cout<<"the item you want to insert"<<endl;<BR>// cin>>item;<BR>// tree.insert(item);<BR>// tree.preorder(tree.getroot());<BR><BR>}<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -