《入门经典》2
来源:互联网 发布:python 判断加载完成 编辑:程序博客网 时间:2024/06/08 11:37
#include <iostream>#include <cstdio>#include <cstring>#include <cstdlib>#include <queue>#include <vector>#define maxn 20struct node{ int value; bool have_value; node *left,*right; node():value(0),have_value(false),left(NULL),right(NULL){}};using namespace std;char s[maxn];node *root;bool failed;node nodes[256];queue<node*>pool;void minit(){ int i; for(i=0;i<256;++i) pool.push(&nodes[i]);}node*newnode(){ node *a = pool.front(); pool.pop(); a -> left = a -> right = 0; a -> have_value = false; return a;}void addnode(int value,char *s){ int i=0,n=strlen(s); node *u = root; for(;i<n;++i) { if(s[i] == 'L') { if(u -> left == NULL) u -> left = newnode(); u = u->left; } if(s[i] == 'R') { if(u -> right == NULL) u -> right = newnode(); u = u->right; } } if(u -> have_value) failed = true; u -> value = value; u -> have_value = true;}bool read_input(){ failed = false; 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;}void pre_dfs(vector<int> &pre_ans,node *u)//先序{ pre_ans.push_back(u -> value); if(u -> left != NULL) pre_dfs(pre_ans,u -> left); if(u -> right != NULL) pre_dfs(pre_ans,u -> right);}void in_dfs(vector<int> &in_ans,node *u)//中序{ if(u -> left != NULL) in_dfs(in_ans,u -> left); in_ans.push_back(u -> value); if(u -> right != NULL) in_dfs(in_ans,u -> right);}void post_dfs(vector<int> &post_ans,node *u)后序{ if(u -> left != NULL) post_dfs(post_ans,u -> left); if(u -> right != NULL) post_dfs(post_ans,u -> right); post_ans.push_back(u -> value);}int main(){ minit(); vector<int> pre_ans; pre_ans.clear(); vector<int> in_ans; in_ans.clear(); vector<int> post_ans; post_ans.clear(); read_input(); pre_dfs(pre_ans,root); in_dfs(in_ans,root); post_dfs(post_ans,root); size_t i; for(i=0;i<pre_ans.size();++i) printf("%d ",pre_ans[i]); printf("\n"); for(i=0;i<in_ans.size();++i) printf("%d ",in_ans[i]); printf("\n"); for(i=0;i<post_ans.size();++i) printf("%d ",post_ans[i]); printf("\n"); return 0;}
二叉树 DFS 先序 中序 后序
0 0
- 算法入门经典-2
- 《入门经典》2
- 算法竞赛入门经典2
- 《算法入门经典2》学习
- 经典入门
- C#入门经典学习12-泛型2
- C#入门经典第五版 示例 2
- 入门经典 例题9-2 嵌套矩阵
- Java+7入门经典 -2 数据
- 《正则表达式入门经典》读书笔记2
- 算法竞赛入门经典 习题2-10
- 算法竞赛入门经典2-5统计
- 算法竞赛入门经典2-6调和级数
- 算法竞赛入门经典习题2-10
- 《算法竞赛入门经典(第2版)》
- 算法竞赛入门经典课后习题2
- 算法竞赛入门经典习题3-2
- 算法竞赛入门经典---函数部分2
- 3000门徒内部训练绝密视频(泄密版)第3课:Scala中函数式编程彻底精通及Spark源码阅读
- 扩展ThreadPoolExecutor打印线程错误堆栈
- HDU 1558 判断两个线段相交附带并查集
- 使用Pull 解析XML文件
- HDU2176 取(m堆)石子游戏
- 《入门经典》2
- JDBC PreparedStatement接口的应用
- android面试(基础篇 9)
- activity的双向传值
- Ubuntu 14.04 ssh的安装和配置
- UVALive 7261 Xiongnu's Land(二分)
- hdu4707Pet最短路(spfa)
- [2482]二叉排序树
- 二叉排序树