算法
使用中序遍历的结果就是排序二叉树的排序输出(从小到大), 因此可以使用中序遍历 来实现判定二叉树是否为二叉排序树。
注意,不能用递归比较root和left,right的大小关系,因为left,right无法判断和root,root->parent, root->parent->parent等的大小关系
代码实现
bool isBSTree(st_trNode * root){
if(NULL == root){
printf("isBSTree param error\n");
return PARAM_ERR;
}
bool rst = true, rst1 = false;
/*递归结束条件*/
if(NULL == root){
return rst;
}
/*左子树*/
if(NULL != root->left){
rst1 = isBSTree(root->left);
rst = rst & rst1;
}
if(g_lastvalue > root->data){
return false;
}
g_lastvalue = root->data;
/*右子树*/
if(NULL != root->right){
rst1 = isBSTree(root->right);
rst = rst & rst1;
}
return rst;
}
void testBSTree(void){
printf("\n************ testBSTree ************ \n");
st_trNode * p = NULL;
st_trNode * root = NULL;
st_trNode * mostLeft = NULL;
bool r