题目来自剑指Offer
题目:
思路:能满足下面思路的就是,不能满足的就不是。可以递归处理。
代码:
#include <iostream>
#include <assert.h>
using namespace std;
bool IsBST(int nArr[],int nStart,int nEnd)
{
if (nStart > nEnd)
{
return true;
}
if (nStart == nEnd)
{
return true;
}
int nRootValue = nArr[nEnd];
int nCur = nStart;
int nLeftEnd = -1;
int nRightStart = -1;
//处理左半部分
while (nCur < nEnd && nArr[nCur] < nRootValue)
{
nCur++;
}
nLeftEnd = nCur - 1;
nRightStart = nCur;
//处理右半部分
while (nCur < nEnd && nArr[nCur] > nRootValue)
{
nCur++;
}
if (nCur != nEnd)
{
return false;
}
else
{
return IsBST(nArr,nStart,nLeftEnd) && IsBST(nArr,nRightStart,nEnd - 1);
}
}
bool IsBST(int nArr[],int nLen)
{
assert(nArr && nLen > 0);
return IsBST(nArr,0,nLen - 1);
}
int main()
{
//int nArr[7] = {5,7,6,9,11,10,8};
//int nArr[4] = {7,4,6,5};
//int nArr[1] = {1};
//int nArr[2] = {1,2};
int nArr[2] = {2,1};
if (IsBST(nArr,2))
{
cout<<"二叉搜索树!"<<endl;
}
else
{
cout<<"不是二叉搜索树!"<<endl;
}
system("pause");
return 1;
}