二叉排序树的判定算法

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

 

转载于:https://www.cnblogs.com/csdnmc/archive/2012/12/26/2834682.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值