题目:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=700
早知道这么简单我应该做快点的,事实上做了很久。
输入是“不断去掉二叉树的叶子”
输出二叉树的前序遍历、
- -字符串的处理花了点时间。因为字母是有顺序的所以依次插进树里就行了。
2790645 | 2012-03-05 16:04:20 | Accepted | 1700 | C++ | 0 | 188 | zisu_123 |
#include<iostream> #include<cstdlib> #include<cstring> #include<cstdio> using namespace std; typedef struct node{ node *p,*l,*r; char key; }node; node *head,*p,num[100]; char str[30]; void preorder(node* head) { if(head==NULL) return; cout<<head->key; preorder(head->l); preorder(head->r); } int main() { char ch1[30],ch2[30]; void dfs(node* &head,int len); while(1) { int i=0; head=NULL; memset(str,'\0',sizeof(str)); gets(ch1); memcpy(str,ch1,strlen(ch1)); while(gets(ch2)) { if(ch2[0]=='*'||ch2[0]=='$') break; strncat(ch2,str,strlen(str)); memcpy(str,ch2,strlen(ch2)); memset(ch2,'\0',sizeof(str)); } for(i=0;i<strlen(str);i++) dfs(head,i); preorder(head); cout<<endl; if(ch2[0]=='$') break; } return 0; } void dfs(node* &head,int len) { if(head==NULL) { head=(node*)malloc(sizeof(node)); head->key=str[len]; len++; head->l=head->r =NULL; return; } if(str[len]>head->key) dfs(head->r,len); if(str[len]<head->key) dfs(head->l,len); }