二叉排序树的判定算法

//函数功能:二叉排序树的判定算法 
/*
    算法思想:根据二叉树的特点“其中序遍历序列为有序序列”,对二叉树进行中序遍历,
   
同时检查当前结点与其中前驱关键字值的大小。
*/
//中序遍历过程中判定给定的二叉树是否为二叉排序树,入是返会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 }

 

posted @ 2012-12-26 20:01  蓝清凡  阅读(981)  评论(0编辑  收藏  举报