uva122(二叉树建立,中序遍历)

来源:互联网 发布:房卡棋牌游戏源码教程 编辑:程序博客网 时间:2024/06/06 08:46

思路:建立二叉树,BFS。

/*****************************************Author      :Crazy_AC(JamesQi)Time        :2015File Name   :*****************************************/// #pragma comment(linker, "/STACK:1024000000,1024000000")#include <iostream>#include <algorithm>#include <iomanip>#include <sstream>#include <string>#include <stack>#include <queue>#include <deque>#include <vector>#include <map>#include <set>#include <stdio.h>#include <string.h>#include <math.h>#include <stdlib.h>#include <limits.h>using namespace std;#define MEM(a,b) memset(a,b,sizeof a)typedef long long LL;typedef unsigned long long ULL;typedef pair<int,int> ii;const int inf = 1 << 30;const int INF = 0x3f3f3f3f;const int MOD = 1e9 + 7;inline int Readint(){char c = getchar();while(!isdigit(c)) c = getchar();int x = 0;while(isdigit(c)){x = x * 10 + c - '0';c = getchar();}return x;}char s[1010];struct node{int val;bool flag;node *l,*r;node():flag(false),val(0),l(NULL),r(NULL){}};node* newnode(){return new node();}node* root = newnode();bool no;bool addnode(int num,char* str){int len = strlen(str);node* fa = root;for (int i = 0;i < len;++i){if (str[i] == 'L'){if (fa->l == NULL) fa->l = newnode();fa = fa->l;}else if (str[i] == 'R'){if (fa->r == NULL) fa->r = newnode();fa = fa->r;}}if (fa->flag) no = false;fa->flag = true;fa->val = num;return true;}void solve(){vector<int> vec;queue<node*> que;que.push(root);while(!que.empty()){node* u = que.front();que.pop();if (u->flag) vec.push_back(u->val);else no = false;if (u->l != NULL) que.push(u->l);if (u->r != NULL) que.push(u->r);}if (!no) puts("not complete");else{for (int i = 0;i < vec.size();++i){printf("%d%c",vec[i],(i == vec.size() - 1)?'\n':' ');}}}int main(){// freopen("in.txt","r",stdin);// freopen("out.txt","w",stdout);while(true){root->val = 0;root->flag = false;root->l = NULL;root->r = NULL;bool mark = false;no = true;while(~scanf("%s",s)){if (strcmp("()",s) == 0) {mark = true;break;}int num;int len = strlen(s);sscanf(s + 1,"%d",&num);addnode(num,strchr(s,',') + 1);}if (!mark) break;solve();}return 0;}


0 0
原创粉丝点击