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和源代码都有,就一遍复习一遍抄码了一遍,更没想到的是编译一遍通过,再没想 ...
随机推荐
- if (HttpContext.Current.User.Identity.IsAuthenticated) 权限验证总是true
将浏览器关闭重启. 注:该语句是判断用户是否经过验证.
- 对arm裸板调试的理解
由于arm芯片一般都包含的由jtag调试这项功能,cpu向外部发出信号时,一般都要同jtag发送出去,它就像一个路口的交警一样,能够控制车辆的运行,当然在arm中指的是cpu发出的数据和地址,我们在调 ...
- HDU 1754 I Hate It(线段树区间查询,单点更新)
描述 很多学校流行一种比较的习惯.老师们很喜欢询问,从某某到某某当中,分数最高的是多少. 这让很多学生很反感.不管你喜不喜欢,现在需要你做的是,就是按照老师的要求,写一个程序,模拟老师的询问.当然,老 ...
- [剑指Offer]54-二叉搜索树的第k个节点
题目描述 给定一棵二叉搜索树,找出其中的第k小的结点,返回指向该节点的指针. 思路 中序遍历即可. 注意特判!报段错误数组越界这里就要考虑是少特判的问题. 法一:借助vector 法二(better) ...
- access导入报错 请求筛选模块被配置为拒绝超过请求内容长度的请求
原因:access文件过大 解决:用压缩和修复把收缩一下access文件 报错截图如下:
- HTML基础学习笔记(2)
HTML学习笔记(2) 1 head标签中的结构 编码结构:<meta charset="UTF-8"> charset---编码 ascll ansi Unicode ...
- go语言中net包tcp socket的使用
一.通过socket我们模拟请求网易 package main; import ( "net" "log" "io/ioutil" &quo ...
- excel数据复制到html表格<textarea>中
方案一 多行文本框接收到复制的excel值后,在文本框的chage事件中,将excel内容分割到二维数组中,然后填充到html的表格的input或textarea中. 数据格式: 单元格复制后的数据格 ...
- jquery过滤class为aa的div
三种方式 $(".aa").filter("div").each(function(){ alert($(this).html()); }); $(" ...
- DirectX中坐标系问题
自己属于笨类型,以前总是记不住directx坐标系是怎样的,今天在网上看到一篇文章,借鉴过来. 1. 明确DirectX是左手坐标系. 描述如下:1. 伸出左手,手面朝上,手背朝下,握住z轴,大拇指方 ...