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. Bootstrap 可视化布局--拖拽后弹窗进行编辑

    Bootstrap 可视化布局--拖拽后弹窗进行编辑 最近后台想一个需求,使用可视化布局-中文 | en中拖拽表格后,弹窗进行编辑,保存下载后在后台生成pdf格式. 奈何各种问题不断,使用 jquer ...

  2. [转载]java获取word里面的文本

    需求场景 开发的web办公系统如果需要处理大量的Word文档(比如有成千上万个文档),用户一定提出查找包含某些关键字的文档的需求,这就要求能够读取 word 中的文字内容,而忽略其中的文字样式.表格. ...

  3. Java获取系统环境信息

    使用System.getProperty()方法获取JVM信息 public class TestSystemGetProperty { public static void main(String[ ...

  4. Spring入门1. IoC入门实例

    Spring入门1. IoC入门实例 Reference:Java EE轻量级解决方案——S2SH 前言: 之前学习过关于Spring的一点知识,曾经因为配置出现问题,而总是被迫放弃学习这些框架技术, ...

  5. 优化JDBC封装

    可重用性较强的JDBC封装 以下为代码,注释中写了主要思想 主类 com.util.JDBCUtil.java package com.util; import java.lang.reflect.F ...

  6. String类的编码和解码问题

    我们前面知道同一个字符在利用不同的编码表得到的结果一般是不一样的. 这里讨论个字符串的编码和解码问题 字符串的一些方法: String(byte[] b,Charset charset); Strin ...

  7. c# DataTable 导出csv文件

    using System; using System.Data; using System.Configuration; using System.Collections.Generic; using ...

  8. Ubuntu下执行mysql的sql文件

    Ubuntu下执行mysql的.sql文件   方法一: 1.执行此命令,会提示输入mysql的root账户的密码,验证成功后,会在dbname这个数据库中执行filename.sql这个脚本,其中f ...

  9. 缺少所需的CD/DVD驱动器设备驱动程序

    公司买了个服务器想把自带系统win10 改成windows server 2008 于是,我就用我的u盘做了个系统盘(用UltraISO或者别的,网上很多在此不在赘述) 然后改了启动项,进入到系统安装 ...

  10. (转)MapReduce Design Patterns(chapter 7 (part 2))(十四)

    External Source Input Pattern Description 这种模式不从hdfs加载数据,而是从hadoop以外系统,例如RDB或web service加载. Intent 想 ...