#1695. 搜索树判断

搜索树判断

当前没有测试数据。

题目描述

对于二叉搜索树,我们规定任一结点的左子树仅包含严格小于该结点的键值,而其右子树包含大于或等于该结点的键值。如果我们交换每个节点的左子树和右子树,得到的树叫做镜像二叉搜索树。
现在我们给出一个整数键值序列,请编写程序判断该序列是否为某棵二叉搜索树或某镜像二叉搜索树的前序遍历序列,如果是,则输出对应二叉树的后序遍历序列。

输入格式

输入的第一行包含一个正整数N,第二行包含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

数据范围与提示

共有 12 组数据:

7 组数据,N≤1000

3 组数据,N≤100000, 且序列随机生成

2 组数据,N≤100000

键值不超过int范围