还原二叉树
来源:互联网 发布:hao123网址之家淘宝 编辑:程序博客网 时间:2024/05/16 08:35
原题:http://www.patest.cn/contests/mooc-ds2015spring/03-%E6%A0%912(Tree Traversals Again)
思路:push结点的顺序就是前序遍历的顺序,pop的顺序就是中序遍历的顺序,跟据前序与中序可还原二叉树
代码:
#include <cstdio>#include <iostream>#include <stack>using namespace std;typedef struct node{int data;struct node *left;struct node *right;}*BinTree;BinTree pre_in(int *pre, int *in, int n){if (n == 0)return NULL;BinTree T = (BinTree)malloc(sizeof(struct node));T->data = *pre;int *p = in;for (; p < in + n; ++p){if (*p == *pre) break;}int k = p - in;T->left = pre_in(pre + 1, in, k);T->right = pre_in(pre + k + 1, in + k + 1, n - k - 1);return T;}bool first = true; //放到函数外作为全局变量 不然每次递归调用first都是新的各层函数内局部变量 都是truevoid PostOrder(BinTree T){if (T){PostOrder(T->left);PostOrder(T->right);if (first){printf("%d", T->data);first = false;}else printf(" %d", T->data);}}int main(){int n,t;//t存放push后面的数char a[5]; //存放push或popint pre[30],in[30];int i,j; //作为pre和in的索引i = j = 0;stack<int> s;cin >> n;while (j < n){scanf("%s", a);if (a[1] == 'u') {scanf("%d", &t);s.push(t);pre[i++] = t;}else {in[j++] = s.top();s.pop();}}BinTree T = pre_in(pre, in, n);PostOrder(T);return 0;}
0 0
- 还原二叉树
- 二叉树还原
- 还原二叉树
- 二叉树的还原
- pta 还原二叉树
- 还原二叉树
- 还原二叉树
- 还原二叉树
- 还原二叉树
- 数据结构--还原二叉树
- 还原二叉树
- 还原二叉树
- 还原二叉树
- 二叉树还原
- 还原二叉树
- 二叉树的还原
- 先序中序还原二叉树 和 中序后序还原二叉树 总结
- 二叉树遍历序列还原
- linux下安装redis(linux(centos/ubuntu) install redis)
- android.os.NetworkOnMainThreadException 异常处理
- 初章之IOS开发进阶学习
- Matlab 文件操作
- CentOS系统程序包管理器【rpm、yum】
- 还原二叉树
- 第八周项目一 实现复数类中的运算符重载
- OpenGL编程逐步深入(八)伸缩变换
- 我的研究方向 Multispectral/Hyperspectral Compressive Snapshot Imaging System
- leetcode Add Binary python 题解
- hdu 4135
- Manacher算法
- 浩易南:心狠,养成每日出单的习惯
- linux下安装mongodb (linux(centos ubuntu) install mongo)