http://pat.zju.edu.cn/contests/pat-a-practise/1043

给予N个数字组成二叉搜索树,判断这个数列是否由先序遍历得出或是镜像先序遍历得出,若是则输出相应的后续遍历或是镜像后续遍历

分析:

镜像先序遍历其实就是 先访问祖先,再访问右子树,再左子树

镜像后续遍历就是先访问右子树,再左子树,在祖先

#include<stdio.h>

struct tree{
int v;
tree *left,*right;
}; int shu[];
int pre[];
int post[];
int step; void bulid(tree* head,int v){
if(v >= head->v){
if(head->right==NULL){
head->right=new tree;
head=head->right;
head->v=v;
head->left=NULL;
head->right=NULL;
}else{
bulid(head->right,v);
}
}else{
if(head->left==NULL){
head->left=new tree;
head=head->left;
head->v=v;
head->left=NULL;
head->right=NULL;
}else{
bulid(head->left,v);
}
}
} void preTree(tree* head,int mirror){
pre[step]=head->v;
step++;
if(mirror==){
if(head->left!=NULL)preTree(head->left,mirror);
if(head->right!=NULL)preTree(head->right,mirror);
}else{
if(head->right!=NULL)preTree(head->right,mirror);
if(head->left!=NULL)preTree(head->left,mirror);
}
} void postTree(tree* head,int mirror){
if(mirror==){
if(head->left!=NULL)postTree(head->left,mirror);
if(head->right!=NULL)postTree(head->right,mirror);
}else{
if(head->right!=NULL)postTree(head->right,mirror);
if(head->left!=NULL)postTree(head->left,mirror);
}
post[step]=head->v;
step++;
} int main(){
int n;
while(scanf("%d",&n)!=EOF){
int i,mirror=-; tree* rhead;
tree* head=new tree;
rhead=head; for(i=;i<=n;i++){
scanf("%d",&shu[i]);
}
if(n==){
printf("YES\n");
printf("%d\n",shu[]);
continue;
} head->v=shu[];
head->left=NULL;
head->right=NULL;
for(i=;i<=n;i++){
bulid(rhead,shu[i]);
} step=;
preTree(rhead,);//普通的先序遍历
for(i=;i<=n;i++){
if(shu[i]!=pre[i])break;
}
if(i==n+)mirror=; step=;
preTree(rhead,);//镜像先序遍历
for(i=;i<=n;i++){
if(shu[i]!=pre[i])break;
}
if(i==n+)mirror=; if(mirror==-){
printf("NO\n");
continue;
} printf("YES\n");
step=;
postTree(rhead,mirror);
int ok=;
for(i=;i<=n;i++){
if(ok==)ok=;
else printf(" ");
printf("%d",post[i]);
}
printf("\n");
} return ;
}

树的遍历——pat1043的更多相关文章

  1. 数据结构--树(遍历,红黑,B树)

    平时接触树还比较少,写一篇博文来积累一下树的相关知识. 很早之前在数据结构里面学的树的遍历. 前序遍历:根节点->左子树->右子树 中序遍历:左子树->根节点->右子树 后序遍 ...

  2. YTU 3023: 树的遍历

    原文链接:https://www.dreamwings.cn/ytu3023/2617.html 3023: 树的遍历 时间限制: 1 Sec  内存限制: 128 MB 提交: 3  解决: 2 题 ...

  3. 团体程序设计天梯赛-练习集L2-006. 树的遍历

    L2-006. 树的遍历 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历 ...

  4. leetcode404-----简单的树的遍历

    Find the sum of all left leaves in a given binary tree. Example: 3 / \ 9 20 / \ 15 7 There are two l ...

  5. pat L2-006. 树的遍历

    L2-006. 树的遍历 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历 ...

  6. L2-006. 树的遍历

    题目链接:L2-006. 树的遍历 今天一神给我手敲二叉树模板,瞬间就领悟了,感觉自己萌萌哒! 看上去很直观! #include <iostream> #include <cstdi ...

  7. js实现对树深度优先遍历与广度优先遍历

    深度优先与广度优先的定义 首先我们先要知道什么是深度优先什么是广度优先. 深度优先遍历是指从某个顶点出发,首先访问这个顶点,然后找出刚访问这个结点的第一个未被访问的邻结点,然后再以此邻结点为顶点,继续 ...

  8. L2-006 树的遍历 (25 分) (根据后序遍历与中序遍历建二叉树)

    题目链接:https://pintia.cn/problem-sets/994805046380707840/problems/994805069361299456 L2-006 树的遍历 (25 分 ...

  9. 团体程序设计天梯赛 L2-006. 树的遍历 L2-011. 玩转二叉树

    L2-006. 树的遍历 #include <stdio.h> #include <stdlib.h> #include <string.h> #include & ...

随机推荐

  1. CGLIB介绍与原理

    转载: http://blog.csdn.net/zghwaicsdn/article/details/50957474 CGLIB介绍与原理(部分节选自网络) 一.什么是CGLIB? CGLIB是一 ...

  2. 弄懂flex布局

    目前在不考虑IE以及低端安卓机(4.3-)的兼容下,已经可以放心使用flex进行布局了.什么是flex布局以及它的好处,这里就不再赘述. 在这篇文章里,想说说flex布局的属性语法及其细节.那么网上也 ...

  3. html表格导出Excel的一点经验心得(转载)

    最近在做统计功能,要求统计结果(表格)既能查看(BS系统,在浏览器查看),又能输出为excel文件.对于输出excel文件,在网上找到n种方案,因为还需查看,最终选择了统计结果输出为table,查看时 ...

  4. SCM-MANAGER

    什么是SCM-MANAGER 基于Web的,集成了  Git. Mercurial .Subversion  多种代码管理工具的源代码管理平台 它有什么优点 简易安装 不需要破解配置文件,完全可配置的 ...

  5. ES常见名词定义

    集群:具有相同clusterName的节点.节点:一个ES实例,并不定是一个节点,因为一个节点上可以启动多个ES实例.索引:相当于数据库database的概念,一个集群可以包含多个索引.分片:索引可以 ...

  6. Code Cache相关知识总结

    codecache代码缓存区,主要存放JIT所编译的代码,同时还有Java所使用的本地方法代码也会存储在codecache中.不同的jvm.不同的启动方式codecache的默认值大小也不尽相同. J ...

  7. bfs+状态压缩dp

    题目连接 题解 : 对两两管道进行bfs,然后用dp[i][j] 来表示在i状态下通过了前j个管道 参考博客 #include<bits/stdc++.h> using namespace ...

  8. DW数据仓库与ODS的区别

    这两天接触到ODS,开始很纳闷,有了DW(Data Warehouse)干嘛还要ODS(Operational Data Store),于是不查不知道,一查吓一跳,这里面还有这么多道道,这里总结一下, ...

  9. Django项目的ORM操作之--模型类数据查询

    1.查询基本格式及理解: 类名.objects.[查询条件] 例如我们要查询数据库中一张表(bookinfo)的所有数据,sql语句为:select * from bookinfo, 对应模型类的操作 ...

  10. egg.js源码解析之render()

    作为阿里的开源node.js框架,我觉得egg.js是很有前途的,故而学之,github上down了一个项目下来(https://github.com/easy-team/egg-vue-webpac ...