判断一棵树是否为二叉排序树

来源:互联网 发布:将军在上 知乎 编辑:程序博客网 时间:2024/06/07 08:02

概要

由于二叉排序树的中序遍历时得到的一定是个一个升序序列,我们可以根据这一性质,利用中序遍历进行判定。


算法

1)设置全局变量max为无穷小。
2)若树为空,则返回true。
3)否则递归判断左子树是否为二叉排序树,并用flag1保存结果。
3)若flag1为假或者根节点关键字小于等于左子树的关键字,则返回false。
4)否则递归判断右子树是否为二叉排序树,并用flag2保存结果。
5)返回flag2。

//判断是否为二叉排序树 bool Judge(BinaryTree* root,int& MAX){    if(root == NULL){//树为空则为二叉排序树         return true;    }    bool bst_l,bst_r;    bst_l = Judge(root->lchild,MAX);//判断左子树是否为二叉排序树    if(!bst_l || MAX >= root->data){        return false;    }    MAX = root->data;    bst_r = Judge(root->rchild,MAX);//判断右子树是否为二叉排序树    return bst_r;}

后记

关于二叉树的基本遍历操作相关请详见博客:二叉树的构建及其遍历算法
关于二叉排序树的基本操作相关请详见博客:二叉搜索树

阅读全文
1 0
原创粉丝点击