剑指33 二叉搜索树的后序遍历序列

  1. class Solution {
  2. public boolean verifyPostorder(int[] postorder) {
  3. if(postorder == null)
  4. return false;
  5. if(postorder.length == 0)
  6. return true;
  7. return verifyPostorderBST(postorder, 0, postorder.length - 1);
  8. }
  9. private boolean verifyPostorderBST(int[] postorder, int left, int right) {
  10. if (left >= right)
  11. return true;
  12. int root = postorder[right];
  13. int i = left;
  14. for (i = left; i < right; i++)
  15. if (postorder[i] > root)
  16. break;
  17. int j = i;
  18. for (j = i; j < right; j++)
  19. if (postorder[j] < root)
  20. return false;
  21. boolean l = true;
  22. if (i > 0)
  23. l = verifyPostorderBST(postorder, left, i - 1);
  24. boolean r = true;
  25. if (i < right)
  26. r = verifyPostorderBST(postorder, i, right - 1);
  27. return (l && r);
  28. }
  29. }