二叉排序数的判定
思路:根据二叉排序树的性质,每一个结点的值(data)会大于其左子树,小于其右子树, 故我们可以利用中序遍历,去比较当前结点与前驱结点的大小。
为此我们需要创建两个变量,flag和prev,分别用于判断是否符合二叉排序树性质和保存前驱结点值
下面是核心代码:
int prev = MIN;//-256 表示前一个结点的data值
int flag = 1;//表示是否符合二叉排序树
int InOrderTraverse(BiTree T)
{
if(T->lchild!=NULL&&flag)//左子树不为空且目前仍符合二叉排序树的性质
{
InOrderTraverse(T->lchild);
}
if(T->data<prev)//当前结点小于前驱(不符合二叉排序树的性质)
{
flag=0;
}
prev=T->data;//更新前驱
if(T->rchild!=NULL&&flag)
{
InOrderTraverse(T->rchild);
}
return flag;
}