考研数据结构(每日一题)
题目:判断给定的二叉树是否是二叉排序树。
算法思想:
在二叉排序树来说,其中序遍历序列为一个递增有序序列。
二叉树进行中序遍历,若始终能保持前一个值比后一个值小,则说明该二叉树是一棵二叉排序树。
完整代码:
KeyType predt = -987654; //predt为全局变量,保存当前结点中序前驱的值,初始值为负无穷大
int JudgeBST(BiTree bt){
int b1,b2;
if(bt == NULL){ //空树
return 1;
}
else
{
b1 = JudgeBST(bt -> lchild); //判断左子树是否是二叉排序树
if(b1 == 0 || predt >= bt -> data){ //若左子树返回值为0或前驱大于等于当前结点
return 0; //不是二叉排序
}
predt = bt -> data; //保存当前结点的关键字
b2 = JudgeBST(bt -> rchild); //判断右子树
return b2; //返回右子树结果
}
}