题目描述:
标签:栈? 树? 二叉搜索树? 递归? 二叉树? 单调栈
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果。如果是则返回?true ,否则返回?false 。假设输入的数组的任意两个数字都互不相同。
代码:
?思路分析:
1、后序遍历是“左-右-中”的顺序,二叉搜索树的定义:根节点的值大于它左子树的所有值,小于它右子树的所有值。
2、所以后序遍历数组的最后一个值是根节点,通过循环遍历,找到左右子树的分界下标,分界下标以前的所有数都小于根节点的值,分解下标以后的所有数都大于根节点的值。
3、递归查找,(first, curIndex - 1)和 (curIndex, last - 1)区间
class Solution {
public boolean verifyPostorder(int[] postorder) {
if(postorder == null || postorder.length == 0){
return true;
}
return check(postorder, 0, postorder.length - 1);
}
public boolean check(int[] postorder, int first, int last){
if(last - first <= 1){
return true;
}
int rootValue = postorder[last];
int curIndex = first;
while(curIndex < last && postorder[curIndex] < rootValue){
curIndex++;
}
for(int i = curIndex; i < last;i++){
if(postorder[i] < rootValue){
return false;
}
}
return check(postorder, first, curIndex - 1) && check(postorder, curIndex, last - 1);
}
}
|