pat 甲级 1086(树的遍历||建树)
思路1:可以用建树来做
由于是先序遍历,所以直接先序建树就行了。
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int maxn = ;
int a[maxn],n,num;
char str[];
void build(int id)
{
int x;
if(num<=) return ;
scanf("%s",str);
if(str[]=='u')
{
scanf("%d",&x);
a[id]=x;
num--;
build(id*);
build(id*+);
}
else num--;
}
void postorder(int x)
{
if(a[x]!=)
{
postorder(x*);
postorder(x*+);
if(num==) printf("%d",a[x]),num=;
else printf(" %d",a[x]);
}
}
int main(void)
{
int i;
cin>>n;
getchar();
num=n*;
build();
num=;
postorder();
return ;
}
思路2:转换为前序中序遍历(参考柳神的博客)
如果输入时不带堆栈就是前序遍历,带堆栈就是中序遍历,最后转换为后序遍历。
#include<iostream>
#include<vector>
#include<cstdio>
#include<stack>
#include<cstring>
using namespace std;
const int maxn = ;
vector <int> in,pre,num;
char str[];
int n,pt=;
void f(int root,int st,int ed)
{
if(st>ed) return ;
int i;
for(i=st;i<=ed;i++) if(pre[root]==in[i]) break;
f(root+,st,i-);
f(root+(i-st)+,i+,ed);
if(pt==) printf("%d",num[pre[root]]),pt=;
else printf(" %d",num[pre[root]]);
}
int main(void)
{
int i,x,id=;
stack <int> st;
cin>>n;
for(i=;i<n*;i++)
{
scanf("%s",str);
if(str[]=='u')
{
scanf("%d",&x);
num.push_back(x);
pre.push_back(id);
st.push(id++);
}
else
{
in.push_back(st.top());
st.pop();
}
}
f(,,n-);
return ;
}
pat 甲级 1086(树的遍历||建树)的更多相关文章
- PAT甲级专题|树的遍历
PAT甲级专题-树的遍历 涉及知识点:树.建树.深度优先搜索.广度优先搜索.递归 甲级PTA 1004 输出每一层的结点,邻接表vector建树后.用dfs.bfs都可以边搜边存当前层的数据, #in ...
- PAT 甲级 1086 Tree Traversals Again (25分)(先序中序链表建树,求后序)***重点复习
1086 Tree Traversals Again (25分) An inorder binary tree traversal can be implemented in a non-recu ...
- PAT甲级 1004 树
思路:直接遍历整棵树判定每个结点是否有孩子,没有则把当前高度的叶子节点数加一. AC代码 #include <stdio.h> #include <string.h> #inc ...
- (PAT)L2-006 树的遍历 (二叉树构建)
题目链接:https://www.patest.cn/contests/gplt/L2-006 给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历的序列.这里假设键值都是互不相等的正整数. 输入格 ...
- pat -1004(树的遍历)
题目链接:https://pintia.cn/problem-sets/994805342720868352/problems/994805521431773184 思路: (1)用vector记录每 ...
- PAT 甲级 1086 Tree Traversals Again
https://pintia.cn/problem-sets/994805342720868352/problems/994805380754817024 An inorder binary tree ...
- PAT甲级满分攻略|记一次考试经历
一次考试经历 今天是"大雪",很冷. 来到隔壁的学校考试,记得上一次来河中医是两年前大一刚开学吧,那天晚上印象比较深刻,6个室友骑车到处闲逛.当时还不会Hello world. 很 ...
- PAT甲级|1151 LCA in a Binary Tree 先序中序遍历建树 lca
给定先序中序遍历的序列,可以确定一颗唯一的树 先序遍历第一个遍历到的是根,中序遍历确定左右子树 查结点a和结点b的最近公共祖先,简单lca思路: 1.如果a和b分别在当前根的左右子树,当前的根就是最近 ...
- PAT甲级题分类汇编——树
本文为PAT甲级分类汇编系列文章. AVL树好难!(其实还好啦~) 我本来想着今天应该做不完树了,没想到电脑里有一份讲义,PPT和源代码都有,就一遍复习一遍抄码了一遍,更没想到的是编译一遍通过,再没想 ...
随机推荐
- Karma - MVC Framework for Unity3D
Karma is an MVC framework for Unity3D. Because of how Unity is structured, it actually turns out to ...
- [Java笔记]面向对象-单例模式
单例模式 目标 使JVM中最多只有一个该类的实例,以节省内存.缺点:只能建一个该类的实例. 实现 具体实现思路: 1构造方法私有化//故在外面不能new很多次 2对外提供一个公开的静态的类方法,获取类 ...
- f5申请并激活License
建议在图形界面下进行激活BIG-IP设备License的操作.正式设备第一次开机时会自带一个激活码,但仍然需要激活License才能使用. 如果BIG-IP设备可以访问因特网的话,可以使用自动模式激活 ...
- mysql系列(3)之 DML语句
DML操作指的是对数据库中表记录的操作,主要包括表记录的插入(insert).更新(update).删除(delete)和查询(select). 1.插入
- C++中的字符数组与字符指针
//[C++基础]字符数组和字符指针.cpp//剑指offer上的这段话://为了节省内存,c/c++把常量字符串放到单独的一个内存空间.但是当几个指针赋值给相同的常量字符串时,它们实际上会指向相同的 ...
- ARM交叉编译工具链
交叉编译工具链是一个由编译器.连接器和解释器组成的综合开发环境,交叉编译工具链主要由binutils.gcc和glibc三个部分组成. 免费版目前有三大主流工具商提供,第一是GNU(提供源码,自行编译 ...
- android 下拉刷新框架PullToRefreshScrollView(com.handmark.pulltorefresh)
很简单,实现OnRefreshListener这个监听器. mPullRefreshScrollView .setOnRefreshListener(new OnRefreshListener< ...
- 转 移动端-webkit-user-select:none导致input/textarea输入框无法输入
移动端webview中写页面的时候发现个别Android机型会导致input.textareat输入框无法输入(键盘可以弹起,不是webView.requestFocus(View.FOCUS_DOW ...
- 10.24JS日记
1.函数都有返回值,人为return,返回什么就是什么,否则,他的返回值就是undefined 而方法的本质也是函数,所以也有返回值 document.getElementById()返回的是获取的标 ...
- Oracle_PL/SQL(9) 例外处理
例外处理1.例外分类:预定义例外,非预定义例外,自定义例外三种传递例外:如果在例外处理部分exception没有捕捉例外,oracle会将例外传递到调用环境.捕捉并处理例外:使用例外处理部分完成exc ...