大一下半期数据结构

搜索树判断

对于二叉搜索树,我们规定任一结点的左子树仅包含严格小于该结点的键值,而其右子树包含大于或等于该结点的键值。如果我们交换每个节点的左子树和右子树,得到的树叫做镜像二叉搜索树。

现在我们给出一个整数键值序列,请编写程序判断该序列是否为某棵二叉搜索树或某镜像二叉搜索树的前序遍历序列,如果是,则输出对应二叉树的后序遍历序列。

输入格式:

输入的第一行包含一个正整数N(≤1000),第二行包含N个整数,为给出的整数键值序列,数字间以空格分隔。

输出格式:

输出的第一行首先给出判断结果,如果输入的序列是某棵二叉搜索树或某镜像二叉搜索树的前序遍历序列,则输出YES,否侧输出NO。如果判断结果是YES,下一行输出对应二叉树的后序遍历序列。数字间以空格分隔,但行尾不能有多余的空格。

输入样例1:

7
8 6 5 7 10 8 11

输出样例1

YES
5 7 6 8 11 10 8

输入样例2:

7
8 6 8 5 10 9 11

输出样例2:

No

题目解答:

#include <stdio.h>
#include<stdlib.h>
typedef struct node *Node;
struct node {int Num;Node Left;Node Right;
};
int a[10001];
int flag;
int Result;
Node Insert(Node,Node);
Node Read();
void DLR(Node H) {if(H&&Result) {
//      printf("{%d-%d}",a[flag],H->Num);if(H->Num!=a[flag++])Result=0;DLR(H->Left);DLR(H->Right);}
}
void LRD(Node H) {if(H) {LRD(H->Left);LRD(H->Right);if(!Result)printf(" ");else Result=0;printf("%d",H->Num);}
}
void Swap(Node H) {if(H) {Swap(H->Left);Swap(H->Right);Node temp=H->Left;H->Left=H->Right;H->Right=temp;}
}int main() {int n;scanf("%d",&n);Node Head=NULL;for(int i=0; i<n; i++) {Node temp=Read();a[i]=temp->Num;Head=Insert(Head,temp);}flag=0;Result=1;DLR(Head);if(!Result) {Swap(Head);Result=1;flag=0;DLR(Head);}if(Result) {printf("YES\n");
//      Result=0;LRD(Head);} else printf("NO");return 0;
}Node Insert(Node H,Node K) {if(!H) {return K;}if(K->Num<H->Num) {H->Left=Insert(H->Left,K);} else H->Right=Insert(H->Right,K);return H;
}Node Read() {Node temp=(Node)malloc(sizeof(struct node));scanf("%d",&temp->Num);temp->Left=NULL;temp->Right=NULL;return temp;
}

7-2 搜索树判断 (25 分)相关推荐

  1. 7-28 搜索树判断 (25 分)(思路加详解) just easy!

    一:题目 对于二叉搜索树,我们规定任一结点的左子树仅包含严格小于该结点的键值,而其右子树包含大于或等于该结点的键值.如果我们交换每个节点的左子树和右子树,得到的树叫做镜像二叉搜索树. 现在我们给出一个 ...

  2. 7-42 关于堆的判断 (25 分)

    7-42 关于堆的判断 (25 分) 将一系列给定数字顺序插入一个初始为空的小顶堆H[].随后判断一系列相关命题是否为真.命题分下列几种: x is the root:x是根结点: x and y a ...

  3. 【CCCC】L2-012 关于堆的判断 (25分),,手写堆,二叉树编号,向上调整

    problem L2-012 关于堆的判断 (25分) 将一系列给定数字顺序插入一个初始为空的小顶堆H[].随后判断一系列相关命题是否为真.命题分下列几种: x is the root:x是根结点: ...

  4. l2-004 这是二叉搜索树吗? (25分)_什么是 “线段树” ?

    线段树是一个复杂的数据结构,比较难理解,也比较难解释清楚.在我将这个数据结构反复学习了五遍的时候,我终于有了信心写出这篇介绍线段树的文章.希望大家能够掌握这种数据结构. 这篇文章比较长,建议大家耐心阅 ...

  5. 04-树4 是否同一棵二叉搜索树 (25 分)

    给定一个插入序列就可以唯一确定一棵二叉搜索树.然而,一棵给定的二叉搜索树却可以由多种不同的插入序列得到.例如分别按照序列{2, 1, 3}和{2, 3, 1}插入初始为空的二叉搜索树,都得到一样的结果 ...

  6. 7-1 是否同一棵二叉搜索树 (25 分)

    大一下半期数据结构 是否同一棵二叉搜索树 给定一个插入序列就可以唯一确定一棵二叉搜索树.然而,一棵给定的二叉搜索树却可以由多种不同的插入序列得到.例如分别按照序列{2, 1, 3}和{2, 3, 1} ...

  7. 【解析】基础实验4-2.5 关于堆的判断 (25 分)

    立志用最少的代码做最高效的表达 将一系列给定数字顺序插入一个初始为空的小顶堆H[].随后判断一系列相关命题是否为真.命题分下列几种: x is the root:x是根结点: x and y are ...

  8. 关于堆的判断 (25 分)

    题目: 将一系列给定数字顺序插入一个初始为空的小顶堆H[].随后判断一系列相关命题是否为真.命题分下列几种: x is the root:x是根结点: x and y are siblings:x和y ...

  9. 6-2 是否二叉搜索树 (25 分)

    大一下半期数据结构 是否二叉搜索树 本题要求实现函数,判断给定二叉树是否二叉搜索树. 函数接口定义: bool IsBST ( BinTree T ); 其中BinTree结构定义如下: typede ...

  10. 7-1 关于堆的判断 (25 分)

    大一下半期数据结构 关于堆的判断 将一系列给定数字顺序插入一个初始为空的小顶堆H[].随后判断一系列相关命题是否为真.命题分下列几种: x is the root:x是根结点: x and y are ...

最新文章

  1. 项目管理深入理解08--成本管理
  2. MongoDB之python简单交互(三)
  3. 计算机网络总结:第一章 计算机网络和因特网
  4. 模拟搭建Web项目的真实运行环境(五)
  5. VC的MFC中重绘函数的使用总结(整理)
  6. 最新IP数据库 存储优化 查询性能优化 每秒解析上千万
  7. centos7.4二进制安装mysql
  8. 水晶底是什么材质_蓝宝石水晶镜面,贵是有道理的!
  9. 微信公众平台可为市民鉴别万余药品真伪
  10. Linux服务之cobbler批量部署篇
  11. 异数OS 织梦师-云(五)-- 容器服务化,绿色拯救未来。
  12. Android 音频管理器AudioManager类介绍
  13. 12面魔方公式图解法_高手指教一下十二面魔方怎么拼?
  14. 使用echarts画日历热力图
  15. 3D游戏设计——模型与动画
  16. 如何查看存款和贷款的基准利率
  17. 字符映射表 charmap
  18. 递归算法和文件队列算法----实现多级文件夹的遍历,删除和复制操作
  19. 【Mo 人工智能技术博客】现在最流行的图神经网络库 pytorch geometric 上手教学
  20. vue-cli5脚手架搭建项目过程详解 -vue组件单元测试

热门文章

  1. [SpringMVC]SpringMVC学习笔记一: springmvc原理及实例解析.
  2. Oracle Goldengate 安装配置
  3. nagios监控服务短信报警开发及部署细节
  4. centos 6 install EPEL
  5. HDOJ 2035 人见人爱A^B
  6. C/C++中struct结构体定义变量的3种方法及初始化
  7. 台大李宏毅Machine Learning 2017Fall学习笔记 (7)Introduction of Deep Learning
  8. 一道三角函数相关级数求和问题
  9. 重装ubuntu系统后VS Code远程连接失败
  10. LeetCode 85.最大矩形