题目:输入一个非空整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出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; } }