題目描述
#include <stdio.h>
#include <stdlib.h>
#include <vector>
using namespace std;
bool VerifySquenceOfBST(int sequence[], int length)
{
if (!sequence || length <= 0)
return false;
//遍歷到左右子樹分界點
int *root = sequence + length - 1;
int *right = sequence;
while (*right < *root)
++right;
for (int *p = right; p < root; ++p)
{
if (*p < *root)
return false;
}
//判斷左子樹
bool bLeft = true;
if (right > sequence) //左子樹不爲空
bLeft = VerifySquenceOfBST(sequence, right - sequence);
//判斷右子樹
bool bRight = true;
if (right < root) //右子樹不爲空
bRight = VerifySquenceOfBST(right, root - right);
return bLeft && bRight;
}
bool VerifySquenceOfBST(vector<int> sequence) {
if (sequence.empty())
return false;
//遍歷到左右子樹分界點
auto root = sequence.cend()- 1;
auto right = sequence.cbegin();
while (*right < *root)
++right;
for (auto p = right; p < root; ++p)
{
if (*p < *root)
return false;
}
//判斷左子樹
bool bLeft = true;
if (right > sequence.cbegin()) //左子樹不爲空
{
vector<int> leftSeq(sequence.cbegin(), right);
bLeft = VerifySquenceOfBST(leftSeq);
}
//判斷右子樹
bool bRight = true;
if (right < root) //右子樹不爲空
{
vector<int> rightSeq(right, root);
bRight = VerifySquenceOfBST(rightSeq);
}
return bLeft && bRight;
}
int main()
{
int a[] = { 7,4,6,5 };
if (VerifySquenceOfBST(a, 7))
printf("true");
else
printf("false");
printf("\n");
vector<int>b = { 5,7,6,9,11,10,8};
if (VerifySquenceOfBST(b))
printf("true");
else
printf("false");
printf("\n");
getchar();
return 0;
}
效果: