https://www.nowcoder.com/practice/a861533d45854474ac791d90e447bafd
好难哦😥
递归
- 首先是二叉搜索树(左子树每个节点的值 < 该节点的值 < 右子树每个节点的值)的特点;
其次是后序遍历(对于树中的任意节点来说,先打印它的左子树,然后再打印它的右子树,最后打印这个节点本身)的特点。 ```java public static boolean VerifySquenceOfBST(int[] sequence) { //先判断数组是否为空 if (sequence.length == 0)
return false;
int len_s = sequence.length; int root = sequence[len_s - 1]; //根节点 int index = 0; for (int i = 0; i < len_s; i++) {
if (sequence[i] >= root) {
index = i; //得到划分左右子树的索引位
break;
}
} // 这里再验证如果从索引位往后的节点对应值是小于根节点的,就不符合二叉搜索树概念,返回False for (int j = index; j < len_s; j++) {
if (sequence[j] < root) {
return false;
}
}
//接下来还需要再分别判断剩余左子树、右子树是否为二叉搜索树 //假设左子树为二叉搜索树,那么调用上面的函数就会得到如下数据: boolean left = true; if (index > 0) {
left = VerifySquenceOfBST(Arrays.copyOfRange(sequence, 0, index));
}
//同理右子树 boolean right = true; if (index < len_s - 1) {
right = VerifySquenceOfBST(Arrays.copyOfRange(sequence, index, len_s - 1));
}
return left && right; }
```