题目描述
输入一个整数数组,判断该数组是不是某二元查找树的后序遍历的结果。如果是返回true,否则返回false。
输入描述:
|| 输入5、7、6、9、11、10、8,由于这一整数序列是如下树的后序遍历结果:
8
/ \
6 10
/ \ / \
5 7 9 11
输出描述:
|| 返回 true。
输入描述:
|| 输入7、4、6、5,没有哪棵树的后序遍历结果是这个序列。
输出描述:
|| 返回 false。
源代码如下:
bool isPostOrderBST(int squence[], int length)
{
if(squence == NULL || length <= 0)
return false;
// 二元查找树的根节点是其后序遍历数组的最后一个元素
int root = squence[length - 1];
// 其左子树的节点一定比根节点的值小
int i = 0;
for(; i < length - 1; ++ i)
{
if(squence[i] > root)
break;
}
// 右子树的节点一定比根节点大
int j = i;
for(; j < length - 1; ++ j)
{
if(squence[j] < root)
return false;
}
// 判断左子树是否为二元查找树
bool left = true;
if(i > 0)
left = isPostOrderBST(squence, i);
// 判断右子树是否为二元查找树
bool right = true;
if(i < length - 1)
right = verifySquenceOfBST(squence + i, length - i - 1);
return (left && right);
}