判断一棵树是否为二叉排序树
思路
- 二叉排序树的中序遍历是有序的,所以判断一棵排序树可以进行中序遍历并且在遍历过程中判断是否有序。
- 为此设置一个全局变量记录上一个中序遍历节点的值,遍历过程中与全局变量比大小并更新全局变量的值。
实现
#include<stdio.h>
typedef struct node
{
int data;
struct node *lchild;
struct node *rchild;
}BTNode;
int num=-32767; //定义最小的全局变量
//中序遍历思想,并且更新全局变量的值
int Judge(BTNode *&p)
{
int i;
if(p==NULL) return 1; //空节点则返回
i=Judge(p->lchild); //遍历并判断左子树是否满足二叉排序
if(i==0) return 0;
if(p->data>num) //如果符合二叉排序树,更新全局变量的值
num=p->data;
else
return 0;
return Judge(p->rchild);//最后判断右子树是否满足
}