SDUT 216 数据结构实验之二叉树的建立与遍历
1 #include <cstdio> 2 #include <cstring> 3 #include <cstdlib> 4 #include <algorithm> 5 #include <iostream> 6 7 using namespace std; 8 9 struct N 10 { 11 char data; 12 N *l,*r; 13 }; 14 15 N *creat() 16 { 17 N *p = (N *)malloc(sizeof(N)); 18 p->l = p->r = NULL; 19 return p; 20 } 21 22 int site = 0; 23 24 bool insert(N *root,char *s) 25 { 26 if(s[site] == '\0') 27 return false; 28 29 if(s[site] == ',') 30 { 31 root = NULL; 32 site++; 33 return true; 34 } 35 else 36 { 37 root->data = s[site++]; 38 root->l = creat(); 39 if(insert(root->l,s)) 40 root->l = NULL; 41 root->r = creat(); 42 if(insert(root->r,s)) 43 root->r = NULL; 44 return false; 45 } 46 } 47 48 49 void output1(N *root) 50 { 51 if(root == NULL) 52 return ; 53 output1(root->l); 54 cout<<root->data; 55 output1(root->r); 56 } 57 58 void output2(N *root) 59 { 60 if(root == NULL) 61 return ; 62 63 if(root->l == NULL && root->r == NULL) 64 { 65 cout<<root->data; 66 return ; 67 } 68 69 output2(root->l); 70 output2(root->r); 71 cout<<root->data; 72 } 73 74 int ans; 75 76 void depth(N *root,int dep) 77 { 78 79 if(ans < dep) 80 ans = dep; 81 82 if(root == NULL) 83 return ; 84 depth(root->l,dep+1); 85 depth(root->r,dep+1); 86 } 87 88 void leaf(N *root) 89 { 90 if(root == NULL) 91 return ; 92 if(root->l == NULL && root->r == NULL) 93 ans++; 94 leaf(root->l); 95 leaf(root->r); 96 } 97 98 int main() 99 { 100 char s[51]; 101 102 N *root = creat(); 103 104 cin>>s; 105 106 int i ,l; 107 108 site = 0; 109 110 insert(root,s); 111 112 output1(root); 113 cout<<endl; 114 output2(root); 115 cout<<endl; 116 117 ans = 0; 118 119 leaf(root); 120 121 cout<<ans<<endl; 122 123 ans = 0; 124 125 depth(root,0); 126 127 cout<<ans<<endl; 128 129 return 0; 130 }