版权声明:转载请标明出处哦 https://blog.csdn.net/easy_purple/article/details/85218958
题目
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
思路(递归)
后序遍历,即根节点最后输出。这是解题线索。
- 我们根据数组最后一个数来遍历整个数组
- 比数组小的是这棵树的左子树。
- 比数组大的是这棵树的右子树。
- 递归判断左子树
- 递归判断右子树
代码
public static boolean bst(int[] list, int begin, int end) {
if (list.length == 0 || begin > end) {
return false;
}
int root = list[end];// 根节点
int i = begin;
for (; i < end; i++) {// 左子树的节点均小于根节点
if (list[i] > root) {
break;
}
}
for (int j = i; j < end; j++) {// 右子树的节点均大于根节点
if (list[j] < root) {
return false;
}
}
boolean left = true;
if (begin < i - 1) {// 判断左子树
left = bst(list, begin, i - 1);
}
boolean right = true;
if (i < end - 1) {// 判断右子树
right = bst(list, i, end - 1);
}
return left && right;
}