一只彩色的熊猫

导航

二叉排序数的判定

思路:根据二叉排序树的性质,每一个结点的值(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;
}

posted on 2020-06-02 19:44  一只彩色的熊猫  阅读(183)  评论(0编辑  收藏  举报