一、题目内容

image.png

二、题解

解法1:

思路

image.png

代码

  1. class Solution {
  2. public boolean verifyPostorder(int[] postorder) {
  3. return recur(postorder,0,postorder.length - 1);
  4. }
  5. public boolean recur(int[] postorder, int left, int right){
  6. if(left >= right){
  7. return true;
  8. }
  9. int rightFirst = left;
  10. while(postorder[rightFirst] < postorder[right]) {
  11. rightFirst++;
  12. }
  13. int rightFirstCopy = rightFirst;
  14. //找到第一个不大于根节点的节点,看是否为根节点
  15. while(postorder[rightFirst] > postorder[right]) {
  16. rightFirst++;
  17. }
  18. boolean verifyCurrent = rightFirst == right;
  19. boolean isLeftVerify = recur(postorder,left, rightFirstCopy-1);
  20. boolean isRightVerify = recur(postorder,rightFirstCopy,right-1);
  21. return verifyCurrent && isLeftVerify && isRightVerify;
  22. }
  23. }