• 题目:输入一个非空整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。

  • 思路:

    • 1.后续遍历:说明最后一个节点是整棵树的根节点;

    • 2.将整棵树分为左子树和右子树,左子树上所有节点都小于根节点,右子树上所有节点都大于根节点(以此作为判断标准);

      import java.util.Arrays;
      public class Solution {
      public boolean VerifySquenceOfBST(int [] sequence) {
         if(sequence == null || sequence.length == 0){
            return false;
        }
        boolean result = verifyHelper(sequence);
        return result;
      }
      
      public boolean verifyHelper(int [] sequence){
      
        int length = sequence.length;
        if (length == 1 || length == 0) {
            return true;
        }
        boolean result = true;
        for (int i = 0; i < length; i++) {
            // 在数组中找到第一个比根节点大的节点,以该节点在数组的下标为分界点
            if (sequence[length - 1] < sequence[i]) {
                int j = i+1;
                // 判断条件,右子树中所有节点是否都大于根节点
                while (j<length-1){
                    if(sequence[length-1] > sequence[j]){
                        result = false;
                        return result;
                    }
      
                    j++;
                }
                // 当右子树中所有节点都大于根节点,分割数组,分成两部分,相当于左右子树;
                if(result) result = verifyHelper(Arrays.copyOfRange(sequence, 0, i));
                if(result) result = verifyHelper(Arrays.copyOfRange(sequence, i, length-1));
                break;
            }
        }
      
        return result;
      }
      }