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. IPv6 地址分类

    IPv6本地链路地址 IPv6本地链路地址,类似于IPv4中APIPA(Automatic Private IP Addressing,自动专用IP寻址)所定义的地址169.254.0.0/16. I ...

  2. 应用Fiddler对手机应用来抓包

    Fiddler是一款非常流行并且实用的http抓包工具,它的原理是在本机开启了一个http的代理服务器,然后它会转发所有的http请求和响应,因此,它比一般的firebug或者是chrome自带的抓包 ...

  3. DSOFramer原有的接口说明

    (转自:http://blog.csdn.net/hwbox/article/details/5669414) DSOFramer原有的接口说明 =========================== ...

  4. querySelectorAll 与jquery.find 与htmlcollection 的区别

    querySelector 和 querySelectorAll 规范定义 querySelector 和 querySelectorAll 方法是 W3C Selectors API Level 1 ...

  5. Vundle简介安装

    body, table{font-family: 微软雅黑} table{border-collapse: collapse; border: solid gray; border-width: 2p ...

  6. QT 相关书籍

    qt qucik 核心编程 个人觉得此书写得非常之好....这位作者的另外一本虽然没看过,估计也不错 https://bbs.csdn.net/topics/390942701?list=lz qt5 ...

  7. Flask数据库常见关系模板代码

    常见关系模板代码 以下罗列了使用关系型数据库中常见关系定义模板代码 一对多 示例场景: 用户与其发布的帖子(用户表与帖子表) 角色与所属于该角色的用户(角色表与多用户表) 示例代码 class Rol ...

  8. Datesheet 参数手册

    1 明白P/N每一个字是代表什么含义... 这很重要! EP6095-01-381 (CL10C010CBNNNC=CL10C010CB8NNNC ?)----8 代表Ni plating in te ...

  9. Hibernate主键生成策略详解

    转载自:http://blog.csdn.net/wanghuan203/article/details/7562395 hibernate提供的主键生成策略,使我们可以在实体类的映射xml文件中设定 ...

  10. 源码编译tmux

    (1)clone 源代码仓库: $ git clone https://github.com/tmux/tmux.git (2) 编译之前先安装libevent,去官网下载tar包: http://l ...