剑指 Offer 33. 二叉搜索树的后序遍历序列
思路:后序遍历则数组末尾为根节点。
二叉搜索树左子节点值 < 根节点值 <右子节点值
因子划分左右子树,递归判断。
剑指 Offer 33. 二叉搜索树的后序遍历序列
class Solution { public boolean verifyPostorder(int[] postorder) { return recur(postorder, 0, postorder.length - 1); } boolean recur(int[] postorder, int i, int j){ //当 i≥j,说明此子树节点数量≤1,无需判别正确性,因此直接返回true if(i >= j) return true; int p = i; //找到第一个大于根节点的节点,划分左右子树 while(postorder[p] < postorder[j]) p++; int m = p; //和下面的p == j 一起判断是否符合后续遍历 while(postorder[p] > postorder[j]) p++; //如果 p != j 了后面就直接短路了 return p == j && recur(postorder, i, m - 1) && recur(postorder, m, j - 1); } }