分析:
根据二叉查找树的定义,二叉查找树或者是一棵空二叉树,或者是具有一下特性的二叉树:
- 若它的左子树不为空,则左子树上的所有结点的值均小于根节点的值;
- 若它的右子树不为空,则右子树上的所有结点的值均小于根节点的值;
- 它的左右子树又分别是二叉查找树。
结合二叉树的后序遍历,则初始序列的最后一位为树的根节点。
方法:
bool judge_is_search_tree(int *a, int start, int end) {
if (start == end) return true;
if (start > end) return false;
int root = a[end - 1];
int i = start;
while (i < end-1 && a[i] < root) i++;
int pos = i;
while (i < end-1) {
if (a[i] < root) return false;
i++;
}
bool left = judge_is_search_tree(a, 0, pos);
bool right = judge_is_search_tree(a, pos, end-1);
return left&&right;
}