设计判断二叉树是否为二叉排序树的算法。
二叉排序树:左子树值小于根结点。
右子树值大于根接点的二叉排序树。
直接上代码,采用的是递归方法。
typedefstructTNode
{
TNode*pLeft;
intchData;
TNode*pRight;
}TNode,*PTNode;
boolIsBinarySortTree(TNode*root)
{
//当接点为空的时候满足二叉排序树
if(NULL==root){
returntrue;
}
//当左接点存在,如果根小于左接点,就不满足二叉排序树
//当右接点存在,如果根大于右结点,就不满足二叉排序树
if((root-pLeft!=NULLroot-chDataroot-pLeft-chData)
(root-pRight!=NULLroot-chDataroot-pRight-chData)){
returnfalse;
}
boolbIsLeft=IsBinarySortTree(root-pLeft);
//只要有一个接点不满足,马上就结束。
if(!bIsLeft){
returnfalse;
}
boolbIsRight=IsBinarySortTree(root-pRight);
if(!bIsRight){
returnfalse;
}
//如果能执行到最后,一定是满足二叉排序树的,因为在前面只要有一个不满足就已经结束了,根本不会执行到这里。
returntrue;
}
当然,还可以使用队列来写程序。还是那句话,如果有问题的话,可以找我私聊。包教包会。茶水丰厚。
赞赏