二叉排序树的判定算法
//函数功能:二叉排序树的判定算法
/*
算法思想:根据二叉树的特点“其中序遍历序列为有序序列”,对二叉树进行中序遍历,
同时检查当前结点与其中前驱关键字值的大小。
*/
//中序遍历过程中判定给定的二叉树是否为二叉排序树,入是返会true,否则返回false
//pre指向中序前驱结点,初值为NULL
1 typedef struct treeNode 2 { 3 int data; //二叉排序树的元素类型为int 4 struct treeNode *l,*r; 5 }treeNode,*BiTree; 6 7 /* 8 中序遍历二叉树,root为根节点,pre初始值为null。 9 10 */ 11 12 bool Is_BS_Tree(BiTree root,BiTree pre) 13 { 14 if(!root) 15 {//空二叉树也是二叉排序树,所以返回true。 16 return true; 17 } 18 if(Is_BS_Tree(root->l,pre)) 19 {//若左子树是二叉排序树。 20 //是否为二叉排序树取决于前驱值和根节点值的大小。 21 if((pre==null)||(pre->data<root->data)) 22 { 23 pre=root; 24 //再次判断右子树是否为二叉排序树。 25 return Is_BS_Tree(root->l,pre); 26 } 27 } 28 //以上情况出现异常,则返回false。 29 return false; 30 }