package main /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * @param sequence int整型一维数组 * @return bool布尔型 */ func VerifySquenceOfBST( sequence []int ) bool { // write code here // 后序遍历的最后一个节点一定是根节点 // 前面部分分别是左子树 or 右子树 // 先找左子树部分(找到第一个大于根节点的节点下标) // 再在右子树部分遍历(如果出现比根节点小的元素,返回 false,右子树值全部大于根节点) // 继续判断左子树部分、右子树部分是否满足(递归处理) if len(sequence) == 0 { return false } if len(sequence) == 1 { return true } root := sequence[len(sequence)-1] // left i := 0 for i < len(sequence)-1 { //不需要考虑根节点 if sequence[i] > root { break } i++ } // right 用 j 作为右子树的遍历指针 j := i for j < len(sequence)-1 { if sequence[j] < root { return false } j++ } // 如果遍历到没有左右子树,那么说明已经判断的部分都是符合条件的 left, right := true, true if i > 0 { left = VerifySquenceOfBST(sequence[:i]) } if i < len(sequence)-1 { right = VerifySquenceOfBST(sequence[i:len(sequence)-1]) } return left && right }