数据结构总结之树
来源:互联网 发布:windows 网盘管理工具 编辑:程序博客网 时间:2024/05/16 19:36
1.树的添加+bfs例题:uva122
#include <iostream>#include <stdio.h>#include <vector>#include <queue>#include <string.h>using namespace std;struct Node{ int data; bool vis; Node* ls; Node* rs; Node() { vis=false; ls=NULL; rs=NULL; }};char s[300];Node *root;bool flag;void addnode(){ Node * p=root; int data_; sscanf(&s[1],"%d",&data_);//必须从第一个是数字的算起 int i; for(i=2; s[i]!='L' && s[i]!='R' && s[i]!=')'; i++); if(s[i]==')') { root->data=data_; root->vis=true; return ; } for(; s[i]!=')'; i++) { if(s[i]=='L') { if(p->ls==NULL) p->ls=new Node(); p=p->ls; } else { if(p->rs==NULL) p->rs=new Node(); p=p->rs; } } if(p->vis) flag=false; p->data=data_; p->vis=true;}vector<int> ans;queue<Node*> q;int read(){ while(!q.empty()) q.pop(); ans.clear(); flag=true; root = new Node(); if(scanf("%s",s)==0 || strcmp(s,"()")==0) return 0; addnode(); while(scanf("%s",s) && strcmp(s,"()")!=0) addnode(); return 1;}bool bfs(){ Node*tmp; q.push(root); while(!q.empty())//如果程序在中间就return了,q就不为空! { tmp=q.front(); if(tmp->ls!=NULL) { if(tmp->vis) q.push(tmp->ls); else return false; } if(tmp->rs!=NULL) { if(tmp->vis) q.push(tmp->rs); else return false; } ans.push_back(tmp->data); q.pop(); } return true;}int main(){ while(read()) { if(!bfs() || !flag) printf("not complete\n"); else { for(int i=0; i<ans.size(); i++) printf("%d%c",ans[i],i==ans.size()-1?'\n':' '); } } return 0;}/*(129,) (399,R) (556,L) (77,RL) ()(382,RLLLRL) (641,RLL) (571,R) (460,RLLLRLL) (335,RL) (643,RLLLRR) (797,RLLLR) (309,RLLLL) ()*/
阅读全文
0 0
- 数据结构总结之树
- 数据结构总结之线段树
- 数据结构总结之线段树
- 实用数据结构总结之二叉树遍历
- 数据结构之二叉树基础知识总结
- 关于数据结构之树的一些总结
- 数据结构之 排序二叉树总结
- 数据结构总结之最小生成树
- [数据结构]之调研总结
- 数据结构之查找总结
- 【数据结构之宏观总结 】
- 数据结构总结之map
- 数据结构总结之二分
- 数据结构总结之dfs
- 数据结构总结之队列
- 数据结构总结之bfs
- 数据结构总结之KMP
- 数据结构总结之lca
- 国学名句(2)
- pat乙1010
- 嵌入式系统
- HDU5104-Primes Problem
- JDBC防注入攻击
- 数据结构总结之树
- 单链表
- android 购物车二级列表实现
- C++ Jsoncpp源代码编译与解析Json
- Banner自动轮播图
- 关于SharedPreferences共享参数的学习与理解
- 219. Contains Duplicate II
- Residual Net 详解
- SQL注入攻击一