二叉排序数的判定

思路:根据二叉排序树的性质,每一个结点的值(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;
}
原文地址:https://www.cnblogs.com/whyblogs/p/13033315.html