6.3.2 层次遍历
来源:互联网 发布:查理大学 知乎 编辑:程序博客网 时间:2024/05/16 07:51
#include<cstdio>#include<cstring>#include<cstdlib>#define MAX 256char s[MAX + 10];int failed;int n = 0, ans[MAX];typedef struct Node{int have_value;int v;struct Node *left, *right;} Node;Node *root;Node* newnode(){Node* u = (Node*)malloc(sizeof(Node));if(u != NULL){u->left = u->right = NULL;u->have_value = 0;}return u;}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 = 1;u->v = v;u->have_value = 1;}void remove_tree(Node* u){if(u == NULL) return;remove_tree(u->left);remove_tree(u->right);free(u);}int read_input(){failed = 0;remove_tree(root);root = newnode();for(;;){if(scanf("%s",s) != 1) return 0;if(!strcmp(s,"()")) break;int v;sscanf(&s[1],"%d",&v);addnode(v,strchr(s,',')+1);}return 1;}int bfs(){int front = 0, rear = 1;Node* q[MAX];q[0] = root;while(front < rear){Node* u = q[front++];if(!u->have_value) return 0;ans[n++] = u->v;if(u->left != NULL) q[rear++] = u->left;if(u->right != NULL) q[rear++] = u->right;}return 1;}int main(){if(read_input()){n = 0;if(bfs()){for(int i = 0; i < n-1; i++)printf("%d ",ans[i]);printf("%d\n",ans[n-1]);}elseprintf("-1\n");}return 0;}
- 6.3.2 层次遍历
- 6.3.2 层次遍历
- 6.3.2 层次遍历
- 层次遍历2叉树
- 层次遍历2叉树
- 算法竞赛入门经典6.3.2层次遍历
- 层次遍历(刘汝佳的小白6.3.2)综合
- 层次遍历
- 层次遍历
- 层次遍历
- 层次遍历
- 层次遍历
- 【数据结构】二叉树的层次遍历2
- 二叉树(2)层次遍历
- 前序遍历层次遍历
- 6.3.2 层次遍历二叉树【算法入门经典】【结构体指针】
- 多叉树的层次遍历
- 层次遍历树
- OftenTap亲密度通讯录: 联系人亲密度管理, 群发短信/邮件, 快捷拨号器
- MySQL新建用户,授权,删除用户,修改密码
- 尾递归
- 大话设计模式八:工厂方法模式(factory method)
- win7+64位+Oracle+11g+64位下使用PLSQL+Developer+的解决办法
- 6.3.2 层次遍历
- 使用代理模式的数据库连接池
- platform平台设备驱动
- ActionContext和ServletActionContext小结
- LRU算法实现
- 递增/递减操作符和指针
- iOS 带IAP提交注意事项及无法submit for review的解决方案
- fasm driver 驱动编程
- ActiveX Debug Assertion Failed