二叉树

  1 #include <iostream>
  2 #include <queue>
  3 #include <cstdio>
  4 using namespace std;
  5 typedef char ElemTp;
  6 typedef struct Bittree
  7 {
  8     ElemTp data;
  9     struct Bittree *l,*r;
 10 }*BitLink,BitNode;
 11 BitLink CrtTree()
 12 {
 13     ElemTp t;
 14     t=getchar();
 15     if(t=='#') return NULL;
 16     BitLink tree=new BitNode;
 17     tree->data=t;
 18     tree->l=CrtTree(),tree->r=CrtTree();
 19     return tree;
 20 }
 21 void FreeTree(BitLink tree)
 22 {
 23     if(!tree) return ;
 24     if(!tree->l&&!tree->r)
 25     {
 26         delete tree;
 27         return ;
 28     }
 29     FreeTree(tree->l);
 30     FreeTree(tree->r);
 31     delete tree;
 32 }
 33 
 34 void DLR(BitLink tree)
 35 {
 36     if(!tree) return ;
 37     cout<<tree->data<<" ";
 38     DLR(tree->l);
 39     DLR(tree->r);
 40 }
 41 void LDR(BitLink tree)
 42 {
 43     if(!tree) return ;
 44     LDR(tree->l);
 45     cout<<tree->data<<" ";
 46     LDR(tree->r);
 47 }
 48 void LRD(BitLink tree)
 49 {
 50     if(!tree) return ;
 51     LRD(tree->l);
 52     LRD(tree->r);
 53     cout<<tree->data<<" ";
 54 }
 55 
 56 
 57 void layertrave(BitLink tree)
 58 {
 59     if(!tree) return ;
 60     queue<BitLink> Queue;
 61     Queue.push(tree);
 62     while(!Queue.empty())
 63     {
 64         tree=Queue.front();
 65         Queue.pop();
 66         cout<<tree->data<<" ";
 67         if(tree->l) Queue.push(tree->l);
 68         if(tree->r) Queue.push(tree->r);
 69     }
 70 }
 71 BitLink CrtTree(char *a,int &i,char *b,int u,int v)
 72 {
 73     /// CrtTree(a,0,b,0,strlen(b)-1);
 74     BitLink tree;
 75     int k;
 76     if(u>v) return NULL;
 77     tree=new BitNode;
 78     tree->data=a[i++];
 79     for( k=u;k<=v;k++)
 80         if(b[k]==tree->data) break;
 81     tree->l=CrtTree(a,i,b,u,k-1);
 82     tree->r=CrtTree(a,i,b,k+1,v);
 83     return tree;
 84 }
 85 int main()
 86 {
 87     //-+a##*b##-c##d##/e##f##//a+b*(c-d)-e/f
 88     BitLink tree=CrtTree();
 89     cout<<"DLR:";
 90     DLR(tree);
 91     cout<<endl;
 92 
 93     cout<<"LDR:";
 94     LDR(tree);
 95     cout<<endl;
 96 
 97     cout<<"LRD:";
 98     LRD(tree);
 99     cout<<endl;
100 
101     cout<<"LayerTravel:";
102     layertrave(tree);
103     cout<<endl;
104 
105     char a[100],b[100];
106     cout<<"please input DLR:";
107     cin>>a;
108     cout<<"please input LDR:";
109     cin>>b;
110     int i=0;
111     BitLink tree2=CrtTree(a,i,b,0,strlen(b)-1);
112     cout<<"LayerTravel:"<<endl;
113     layertrave(tree2);
114     cout<<endl;
115 
116     cout<<"LRD:"<<endl;
117     LRD(tree2);
118 
119     FreeTree(tree);
120     FreeTree(tree2);
121     return 0;
122 }

 

posted @ 2014-11-01 11:53  *mask  阅读(140)  评论(0编辑  收藏  举报