这个算法正确吗?

//判断二叉树是否是二叉排序树
//1代表是,0不是
typedef struct node
{
int key;
InfoType other;
struct node *left,*right;
}BiNode,*BiTree;

int BSTVerify(BiTree t)
{
int ret;
if(t==null)
{
return 1;
}
ret=BSTVerify(t->left);
if(ret==1)
{
ret=BSTVerify(t->right);
if(ret==1)
{

if(t->left==null)
{
leftKey=MIN;//计算机所能表示的最小值
}
else
{
leftKey=t->left->key;
}
if(t->right==null)
{
rightKey=MAX;//计算机所能表示的最大值
}
else
{
rightKey=t->right->key;
}
if(leftKey<t->key<rightKey)
{
return 1;
}
}
}
return 0;
}
[779 byte] By [peter310cn-NULL] at [2008-5-21]
# 1
对于树形结构,递归的确能解决好多问题,不过对于楼主的问题何不换个想法,,
对于二叉排序树,如果对它进行中序遍历,所得应该是主值的一个递增序列,
如果从这儿入手。会简单一点吧。。
# 2
哦,这倒是一条思路,但我觉得最好在遍历过程中就去判断
这可能需要在遍历时保存已遍历的节点,而且访问某个节点时进行比较
不需要等遍历完成再去判断是否有序
peter310cn-NULL at 2007-10-25 > top of Msdn China Tech,C/C++,C语言...
# 3
不正确!因为递归时没有考虑根结点的动态。

像这个
5
/ 3 6
/\ / 1 9 2 8

你验算一下:
nobush at 2007-10-25 > top of Msdn China Tech,C/C++,C语言...
# 4
能说清楚一点吗,什么根节点的动态?
peter310cn-NULL at 2007-10-25 > top of Msdn China Tech,C/C++,C语言...
# 5

5 3 6
/ \ /\ / 3 6 1 9 2 8
这三个都是二叉排序树,但合在一起就不是了。

因为你的程序只检验根结点和它的子结点,
当一个根结点降格为子结点时,程序没有再考虑它的子结点了
nobush at 2007-10-25 > top of Msdn China Tech,C/C++,C语言...