作业
#include<iostream> using namespace std; struct Node { char data; Node *l,*r; }; int get(int x) { return (x+1)/2; } void build(Node *t,int l,int r) { // char c; cout<<"请输入所在节点的元素 若为空 则输入'#':"; cin>>t->data; if(l==r) { t->l=NULL; t->r=NULL; return ; } t->l=new (Node); build(t->l,l,(l+r)/2); t->r=new (Node); build(t->r,(l+r)/2+1,r); } void Traq(Node *t) { cout<<t->data<<" "; if(t->l) Traq(t->l); if(t->r) Traq(t->r); } void Traz(Node *t) { if(t->l) Traz(t->l); cout<<t->data<<" "; if(t->r) Traz(t->r); } void Trah(Node *t) { if(t->l) Trah(t->l); if(t->r) Trah(t->r); cout<<t->data<<" "; } int FNd(Node *t) { if(t->data=='#') return 0; if(t->l==NULL&&t->r==NULL) return 1; return FNd(t->l)+FNd(t->r)+1; } int max(int x,int y) { if(x>y) return x; return y; } int FH(Node *t) { if(t->data=='#') return 0; if(t->l==NULL&&t->r==NULL) return 1; return max(FH(t->l),FH(t->r))+1; } void frr(Node *t) { if(t->l==NULL&&t->r==NULL) { free(t); return ; } frr(t->l); frr(t->r); free(t); } int main() { int cas,n,x; Node *root; root=new (Node); cout<<"0:结束操作"<<endl; cout<<"1:建树"<<endl; cout<<"2:前序列遍历树"<<endl; cout<<"3:中序列遍历树"<<endl; cout<<"4:后序列遍历树"<<endl; cout<<"5:求二叉树的节点数(有具体元素的节点)"<<endl; cout<<"6:求二叉树的高度(有具体元素的)"<<endl; while(cin>>cas) { if(cas==0) break; switch(cas){ case 1:cout<<"请输入所建二叉树所在满二叉树有多少节点";cin>>x;n=get(x);build(root,1,n);break; case 2:cout<<"前序遍历结果为:";Traq(root);cout<<endl;break; case 3:cout<<"中序遍历结果为:";Traz(root);cout<<endl;break; case 4:cout<<"后序遍历结果为:";Trah(root);cout<<endl;break; case 5:cout<<"有"<<FNd(root)<<"个节点"<<endl;break; case 6:cout<<"高度为"<<FH(root)<<endl;break; } } frr(root); return 0; }