题意:用栈的push、pop操作给出一棵二叉树的中序遍历顺序,求这棵二叉树的后序遍历。

需要一个堆结构s,一个child变量(表示该节点是其父亲节点的左孩子还是右孩子),父亲节点fa
对于push v操作:
1).第一个push肯定是根节点root。
2).根据child变量,建立fa与v的父子关系。
3).由于是中序遍历,所以接下来的节点必定是v的left(如果有的话),child=left,fa=v;
4).然后进行push操作

对于pop操作:
1).根据中序遍历性质,可知接下来的节点必定是pop节点的右孩子(如果有的话),child=right,fa=s.top()
2).进行pop操作。

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <string.h>
#include <cmath>
#include <stack>
#define LEFT 0
#define RIGHT 1
using namespace std; const int maxn=;
stack<int> s; struct Node{
int left=-;
int right=-;
}node[maxn]; bool first=true;
void postOrder(int u){
if(u==-)
return;
postOrder(node[u].left);
postOrder(node[u].right);
if(first){
first=false;
printf("%d",u);
}
else{
printf(" %d",u);
}
}
int main()
{
int n,v;
int root=-,fa;
int child=LEFT;
char str[];
scanf("%d",&n);
while(scanf("%s",str)!=EOF){
//if(str[0]=='y')
// break;
if(strcmp(str,"Push")==){
scanf("%d",&v);
if(root==-){
root=v;
}
else{
if(child==LEFT){
node[fa].left=v;
}
else{
node[fa].right=v;
}
}
fa=v;
child=LEFT;
s.push(v);
}
else{
child=RIGHT;
fa=s.top();
s.pop();
}
}
postOrder(root);
return ;
}

1086. Tree Traversals Again (25)-树的遍历的更多相关文章

  1. PAT Advanced 1086 Tree Traversals Again (25) [树的遍历]

    题目 An inorder binary tree traversal can be implemented in a non-recursive way with a stack. For exam ...

  2. PAT 甲级 1086 Tree Traversals Again (25分)(先序中序链表建树,求后序)***重点复习

    1086 Tree Traversals Again (25分)   An inorder binary tree traversal can be implemented in a non-recu ...

  3. 【PAT甲级】1086 Tree Traversals Again (25 分)(树知二求一)

    题意:输入一个正整数N(<=30),接着输入2*N行表示栈的出入(入栈顺序表示了二叉搜索树的先序序列,出栈顺序表示了二叉搜索树的中序序列),输出后序序列. AAAAAccepted code: ...

  4. 1086. Tree Traversals Again (25)

    题目如下: An inorder binary tree traversal can be implemented in a non-recursive way with a stack. For e ...

  5. PAT (Advanced Level) 1086. Tree Traversals Again (25)

    入栈顺序为先序遍历,出栈顺序为中序遍历. #include<cstdio> #include<cstring> #include<cmath> #include&l ...

  6. pat1086. Tree Traversals Again (25)

    1086. Tree Traversals Again (25) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue ...

  7. 03-树3. Tree Traversals Again (25)将先序遍历和中序遍历转为后序遍历

    03-树3. Tree Traversals Again (25) 题目来源:http://www.patest.cn/contests/mooc-ds/03-%E6%A0%913 An inorde ...

  8. 03-树2. Tree Traversals Again (25)

    03-树2. Tree Traversals Again (25) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue ...

  9. PAT 1086 Tree Traversals Again

    PAT 1086 Tree Traversals Again 题目: An inorder binary tree traversal can be implemented in a non-recu ...

随机推荐

  1. Azure DevKit(AZ3166)源码找不到头文件问题

    Get “Error Presented: #include errors detected” when opening a project The error message is Error Pr ...

  2. 更改win系统的鼠标样式

    一.找一个你心仪的鼠标样式(.cur文件),并放到 C:\Windows\Cursors 目录下 二.打开,控制面板 -> 硬件和声音 -> 鼠标 ,如下图: 三.浏览鼠标目录,找到你存放 ...

  3. Symbol Table Applications

    符号表应用 在计算机发展的早期,符号表帮助程序员从使用机器语言的数字地址进化到在汇编语言中使用符号名称:在现代应用程序中,符号名称的含义能够通行于跨域全球的计算机网络.快速查找算法曾经并继续在计算机领 ...

  4. VS2017C++单元测试

    0.欢迎食用 希望对点进来的你有所帮助. 全文记流水账,内心想法如示例项目名称. 1.建立需测试的项目 新建项目 正常书写.h 和.cpp文件 2.新建单元测试 右击解决方案 -> 添加 -&g ...

  5. jquery ajax 设置请求头header 参数

    $.ajax( { url:'http://127.0.0.1:30080/api-a/quasiCustom/selectCustomList', type:'post', dateType:'js ...

  6. buffers与cached

    下面是buffers与cached的区别. buffers是指用来给块设备做的缓冲大小,他只记录文件系统的metadata以及 tracking in-flight pages. cached是用来给 ...

  7. python第四十四课——继承性之单继承

    2.继承性 继承: 使用场景: 1).生活层面:... 2).计算机层面: 两部分组成,一部分我们称为父类(基类.超类.superclass),另一部分我们称为子类(派生类.subclass), 子类 ...

  8. unity3D iTween的使用

     iTween是一个动画库,作者创建它的目的就是最小的投入实现最大的产出.让你做开发更轻松,用它能够轻松实现各种动画,晃动,旋转,移动,褪色,上色,控制音频等等 到官网看看 http://itwe ...

  9. mpvue 应用 Vant Weapp框架开发微信小程序

    今天在使用mpvue开发微信小程序的过程中需要实现一个底部上拉选择列表的功能,因为之前做过H5微信公众号的开发,使用的就是有赞的Vant-ui,所以第一时间就想到了有赞的Vant Weapp UI框架 ...

  10. docker tomcat 已主机名为日志输出路径

    目的:所有的日志输出到共享存储目录中 方法:将 tomcat 的日志放置到 /data/logs/主机名/  下, 1. 修改tomcat/conf下的logging.properties [root ...