二叉树层次遍历。
2015-06-01 11:28
204 查看
题目:
http://acm.zju.edu.cn/onlinejudge/showRuns.do?contestId=1
View Code
http://acm.zju.edu.cn/onlinejudge/showRuns.do?contestId=1
#include<cstdio> #include<cstdlib> #include<cstring> #include<vector> #include<queue> using namespace std; const int maxn = 256 + 110; struct Node{ bool have_value; int v; Node* left, *right; Node():have_value(false), left(NULL), right(NULL){} }; Node* root; Node* newnode() { return new Node(); } bool failed; void addnode(int v, char* s) { int n = strlen(s); Node* u = root; for(int i=0; i<n; i++) if(s[i]=='L') { if(u->left==NULL) u->left = newnode(); u=u->left; } else if (s[i]=='R') { if(u->right==NULL) u->right = newnode(); u= u->right; } if(u->have_value) failed = true; u->v=v; u->have_value = true; } void remove_tree(Node* u) { if(u==NULL) return; remove_tree(u->left); remove_tree(u->right); delete u; } char s[maxn]; bool read_input(){ failed = false; remove_tree(root); root = newnode(); for(;;) { if(scanf("%s", s)!=1) return false; if(!strcmp(s, "()")) break; int v; sscanf(&s[1], "%d", &v); addnode(v, strchr(s, ',')+1); } return true; } bool bfs(vector<int>& ans) { queue<Node*> q; ans.clear(); q.push(root); while(!q.empty()) { Node* u = q.front(); q.pop(); if(!u->have_value) return false; ans.push_back(u->v); if(u->left!=NULL) q.push(u->left); if(u->right!=NULL) q.push(u->right); } return true; } int main() { vector<int> ans; while(read_input()) { if(!bfs(ans)) failed = 1; if(failed) printf("not complete\n"); else { for(int i=0; i<ans.size(); i++) { if(i!=0) printf(" "); printf("%d", ans[i]); } printf("\n"); } } return 0; }
View Code
相关文章推荐
- ActiveMQ之介绍及安装
- input文本框获取/失去焦点
- 史上最详细 最基础的 android 面试 知识点总结(一)
- LeetCode 206-Reverse Linked List
- mysql 多个字段拼接
- 判断一个数是否是素数
- asp.net mvc重写404,500错误
- MVC+Linq+EF笔记
- 根据资源的名字获取其ID值
- 如何解决Linux下USB设备节点名不固定问题
- TCP/IP TIME_WAIT状态原理
- MySQL中使用like查找汉字 Incorrect string value 解决办法
- JS错误:Uncaught SyntaxError: Unexpected token ILLEGAL
- “access violation at address xxxxxxxxx”错误
- 理解一般指针和指向指针的指针
- OGRE1.8.1+VS2010配置
- LeetCode 14: Longest Common Prefix
- SELECT INTO 和 INSERT INTO SELECT 两种表复制语句
- 1415-2团队项目互评说明及安排
- saltstack的探索-给zabbix客户端推送一个自定义的配置文件