题目来自剑指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; }