后序遍历从后往前看,先是根,然后先进入右子树,再进入左子树。用单调栈按这个次序把孩子挂上,同时检查每个强度是否落在父结点给出的开区间里。能挂成一棵二叉排序树时,再按先右后左走一遍:某一层第一次遇到的结点,就是该层最靠右的那个。把这些强度加起来。中途有结点挂不进去,就说明这段记录不能还原。
星际探索途中,人类撞见一座年代久远的外星通讯塔。坐标靠一串能量脉冲向外发送。科学家确认,这些互不相同的正整数强度,其实按二叉排序树组织,用来加快检索。
接收端拿到的是一整段脉冲。它记录的是这棵树的后序遍历。
宇宙射线会把这段记录弄乱,于是它未必还能还原成合法的二叉排序树。请完成下面这个核心模块:
注: 「右缘轮廓」是从树的右侧望过去,每一层最后映入眼帘的那个结点(也就是该层最靠右的结点)所带的强度。
输出: 能还原时,写下右缘轮廓的强度总和;不能还原时,记成 −1。
输入格式
数据来自标准输入。
数据范围:
输出格式
输入:
3 8 6 12 15 10
输出:
37
解释:
这段记录末尾的根是 10。比 10 小的 [3,8,6] 是左子树,比 10 大的 [12,15] 是右子树。还原后的树是:

右缘轮廓总和:10+15+12=37。
输入:
3 10 5 8
输出:
-1
解释:
根是 8。由最后一个小于 8 的数 5 划出的左段是 [3,10,5]。其中 10>8,破坏了左子树必须更小的规则,所以这段记录不能还原,输出 −1。
输入:
4 7 9
输出:
20
解释:
根是 9。4<9、7<9,都落在左子树;又有 4<7,于是 4 挂在 7 的左侧,整棵树一路向左(根 9,左孩子 7,再往左是 4)。从右侧望去,各层可见的强度分别是 9、7、4。
右缘轮廓总和:9+7+4=20。
© CodeFun2000 · 使用条款
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册