bool verifySequenceOfBST(vector<int>& sequence, int start, int end){
     if (start >= end) return true;
     int rootval = sequence[end];
     int index = findFitstMoreThanToot(sequence, start, end - 1, rootval);
     bool flag = verifyMoreThanToot(sequence, index, end - 1, rootval);
     if (flag == false){
         return false;
     }
     flag = verifySequenceOfBST(sequence, start, index - 1);
     if (flag == false){
         return false;
     }
     flag = verifySequenceOfBST(sequence, index, end - 1);
     return flag;
 }
Пример #2
0
/******************* 参考代码 ******/
bool verifySequenceOfBST(int sequence[], int length)
{
	if (sequence == NULL || length <= 0)
	{
		return false;
	}
	
	int root = sequence[length - 1];
	
	// 在二叉搜索树中,左子树节点下于根节点
	int i = 0;
	for (; i < length - 1; ++i)
	{
		if (sequence[i] > root)
		{
			break;
		}
	}
	
	// 在二叉搜索树中,右子树的节点大于根节点
	int j = i;
	for (; j < length - 1; ++j)
	{
		if (sequence[j] < root)
		{
			return false;
		}
	}
	
	// 判断左子树是不是二叉搜索树
	bool left = true;
	if (i > 0)
	{
		left = verifySequenceOfBST(sequence, i);
	}
	
	// 判断右子树是不是二叉搜索树
	bool right = true;
	if (i < length - 1)
	{
		right = verifySequenceOfBST(sequence + i, length - i - 1);
	}
	
	return (left && right);
}
 bool verifySequenceOfBST(vector<int>& sequence){
     return verifySequenceOfBST(sequence, 0, sequence.size() - 1);
 }