刚开始看错题,以为0是结束,导致了3次WA。。后来把cin>>放回到while()里面就AC了。。。 // source code of submission 598858, Zhongshan University Online Judge System #include <iostream> #include <string> #include <cstring> using namespace std; struct node { node* left; node* right; int num; }data[200000]; void _preorder(node* parent) { if(parent != NULL) { cout << " " << parent->num; _preorder(parent->left); _preorder(parent->right); } } void _inorder(node* parent) { if(parent != NULL) { _inorder(parent->left); cout << " " << parent->num; _inorder(parent->right); } } void _postorder(node* parent) { if(parent != NULL) { _postorder(parent->left); _postorder(parent->right); cout << " " << parent->num; } } int main() { freopen("1.txt", "r", stdin); int n; bool first = true; while(cin >> n) { if(!first) cout << endl; first = false; if(n == 0) { cout << "Inorder:/n"; cout << "Preorder:/n"; cout << "Postorder:/n"; continue; } memset(data, false, sizeof(data)); cin >> data[0].num; data[0].left = data[0].right = NULL; for(int i = 1; i < n; i++) { cin >> data[i].num; data[i].left = data[i].right = NULL; node* tmp = &data[0]; node* last; while(tmp != NULL) { last = tmp; if(data[i].num <= tmp->num) tmp = tmp->left; else tmp = tmp->right; } if(data[i].num <= last->num) last->left = &data[i]; else last->right = &data[i]; } cout << "Inorder:"; _inorder(&data[0]); cout << "/nPreorder:"; _preorder(&data[0]); cout << "/nPostorder:"; _postorder(&data[0]); cout << endl; } return 0; }