算法思想:由于二叉排序树的中序遍历可以得到一个有序的序列,因此,我们可以使用中序遍历进行求解。
代码如下:
#include <stack>
using namespace std; typedef struct BinaryTree
{
int data;
BinaryTree *lc;
BinaryTree *rc;
}BTNode,*BinaryTree; bool isBST(BinaryTree T)
{
int prevalue = INT_MIN; //获取最小整型数,初始化prevalue
stack<BinaryTree> s;
BinaryTree p = T;
while(p||!s.empty())
{
if(p)
{
s.push(p);
p = p->lc;
}
else
{
p=s.top();
s.pop();
if(prevalue>p->data) //判断前一个结点的值是否不满足二叉排序树的条件
break;//跳出循环,早外面判断
prevalue = p->data;
p = p->rc;
}
}
if(!p && s.empty())
return true;
else
return false;
}
也可以用递归实现
代码如下:
typedef struct BinaryTree
{
int data;
BinaryTree *lc;
BinaryTree *rc;
}BTNode,*BinaryTree; int prevalue = INT_MIN; //获取最小整型数,初始化prevalue
bool isBST(BinaryTree T)
{
bool b1,b2;
if(!T)
return true;
else
{
b1 = isBST(T->lc);
if(b1 ==false||prevalue>T->data)
return false;
prevalue = T->data;
b2 = isBST(T->rc);
return b2;
}
}