思路
- 后序遍历|左子树|右子树|根节点|
- 二叉搜索树的定义是左子树 < 根节点 < 右子树 (或者左子树 > 根节点 > 右子树)
- 因此可以递归判断是否符合二叉搜索树定义
- 数组边界为left right,根元素为root = array[right]
- 从left进行遍历,一直到array[index] > root,这样left ~ index - 1为左子树范围,index ~ right - 1 为右子树范围,递归判断左右子树是否符合定义
- 数组边界为left right,根元素为root = array[right]
class Solution {
public boolean verifyPostorder(int[] postorder) {
return verify(postorder, 0, postorder.length -1);
}
boolean verify(int[] postorder, int left, int right) {
if (left >= right) return true;
int root = postorder[right];
// 左右子树分界线
int index = left;
for(int k = left ; k < right; k++) {
if (postorder[k] < root) {
index = k;
} else break;
}
// 检查右子树是否符合定义
for (int k = index + 1; k < right ;k++) {
if (postorder[k] < root) return false;
}
// 递归检查左右子树
return verify(postorder,left, index) && verify(postorder, index + 1, right - 1);
}
}
Q.E.D.