根据排序二叉树的定义我们知道,左子树节点值<根节点值<右子树节点值,所以判定给定的树是不是排序二叉树,我们只需要通过中序遍历,判断序列是否递增即可。
算法思想:1.判断左子树是不是排序二叉树。2.若是比较前驱节点于当前节点的值,若大于则返回0.若左子树不是排序二叉树同样返回0。3.判断右子树是不是排序二叉树,若是返回1则整个树都是排序二叉树,若不是返回0。
#include <stdio.h>
int pre;//这里用到了全局变量,记录前驱节点
//用全局变量的好处就是,不用作为参数递归的带入到函数中,而且可以被任何函数调用。
int judgeorder(tree t){
int b1,b2;
if(t){
b1=judgeorder(t->lchild);//判断左子树
if(b1=0||pre>t->data){//左子树和本身的判断
return 0;
}
pre=t->data;//把前驱节点置为本身
b2=judgeorder(t->rchild);//判断右边子树
return b2;
//右子树只有两种返回值1或0
//不用和前驱节点进行比较,因为前面已经比较完了。
}else{
return 1; //如果为空节点就是二叉排序树
}
}