
这是我对算法的第一个想法:
bool Judge(PBinTree pbt)
{
PBinTreeNode pLeft, pRight;
bool bLeft = false, bRight=false, bRootl=false, bRootr=false;
if(pbt == NULL)
return true;
// 判断根节点
pLeft = pbt->left;
pRight = pbt->right;
if(pLeft && pLeft->data <= pbt->data)
{
bRootl = true;
}
else
{
return false;
}
if(pRight && pRight->data >= pbt->data)
{
bRootr = true;
}
else
{
return false;
}
// 判断左右子树
bLeft = Judge(pLeft);
bRight = Judge(pRight);
// 同时满足条件才叫二叉排序树
return( bLeft && bRight && bRootl && bRootr);
}

但是无法处理
400

200600
100900500700

这种情况
应该是这样的算法
typedef struct node{
int data;
struct node *left, *right;
}NODE;
int judge(NODE *p, int leftbound, int rightbound) {
if (p==NULL) return 1;
if (p-> data < leftbound || p-> data > rightbound) return 0;//不要等号
if (!judge(p-> left,leftbound,p-> data)) return 0;
if (!judge(p-> right, p-> data,rightbound)) return 0;
return 1;
}
根值是value,则左子树值小于根,右子树值大于根. 也就是说,左子树的值(-maxint二叉排序树是,value)范围,右子树的值是(value,maxint).
被称为法官(root,-maxint二叉排序树是,maxint)
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-170740-1.html
先转再看
不是现在