判断二叉树是否二叉排序树(BST)

时间:2022-09-02 00:08:52

算法思想:由于二叉排序树的中序遍历可以得到一个有序的序列,因此,我们可以使用中序遍历进行求解。

代码如下:

 #include <stack>
using namespace std; typedef struct BinaryTree
{
int data;
BinaryTree *lc;
BinaryTree *rc;
}BTNode,*BinaryTree; bool isBST(BinaryTree T)
{
int prevalue = INT_MIN; //获取最小整型数,初始化prevalue
stack<BinaryTree> s;
BinaryTree p = T;
while(p||!s.empty())
{
if(p)
{
s.push(p);
p = p->lc;
}
else
{
p=s.top();
s.pop();
if(prevalue>p->data) //判断前一个结点的值是否不满足二叉排序树的条件
break;//跳出循环,早外面判断
prevalue = p->data;
p = p->rc;
}
}
if(!p && s.empty())
return true;
else
return false;
}

也可以用递归实现

代码如下:

 typedef struct BinaryTree
{
int data;
BinaryTree *lc;
BinaryTree *rc;
}BTNode,*BinaryTree; int prevalue = INT_MIN; //获取最小整型数,初始化prevalue
bool isBST(BinaryTree T)
{
bool b1,b2;
if(!T)
return true;
else
{
b1 = isBST(T->lc);
if(b1 ==false||prevalue>T->data)
return false;
prevalue = T->data;
b2 = isBST(T->rc);
return b2;
}
}

判断二叉树是否二叉排序树(BST)的更多相关文章

  1. (树)判断二叉树是否为BST

    题目:判断一颗二叉树是否为BST. 思路:其实这个问题可以有多个解决方法. 方法一:递归解决.根据BST的特性.左边的小于根节点的值,右边的大于根节点的值.并且对于每一棵子树都是如此.所以我们可以直接 ...

  2. 二叉排序树&lpar;BST&rpar;创建&comma;删除&comma;查找操作

    binary search tree,中文翻译为二叉搜索树.二叉查找树或者二叉排序树.简称为BST 一:二叉搜索树的定义 他的定义与树的定义是类似的,也是一个递归的定义: 1.要么是一棵空树 2.如果 ...

  3. 二叉排序树&lpar;BST&rpar;构造与应用

             二叉排序树(BST)构造与应用       本文取自<数据结构与算法>(C语言版)(第三版).出版社是清华大学出版社.       本博文作为学习资料整理. 源码是VC+ ...

  4. 【剑指offer】判断二叉树是否为平衡二叉树

    2013-09-03 14:16:51 面试题39:求二叉树的深度.判断二叉树是否为平衡二叉树 小结: 根据平衡二叉树的定义,需要判断每个结点,因此,需要遍历二叉树的所有结点,并判断以当前结点为根的树 ...

  5. 【easy】110&period; Balanced Binary Tree判断二叉树是否平衡

    判断二叉树是否平衡 a height-balanced binary tree is defined as a binary tree in which the depth of the two su ...

  6. &lbrack;Leetcode 100&rsqb;判断二叉树相同 Same Tree

    [题目] 判断二叉树是否相同. [思路] check函数. p==null并且q==null,返回true;(两边完全匹配) p==null或q==null,返回false;(p.q其中一方更短) p ...

  7. PAT-1119(Pre- and Post-order Traversals)&plus;前序和后序遍历确定二叉树&plus;判断二叉树是否唯一

    Pre- and Post-order Traversals PAT-1119 这题难度较大,主要需要考虑如何实现根据前序遍历和后序遍历来确定一颗二叉树 一篇好的文章: 题解 import java. ...

  8. 判断二叉树是否BST

    一.问题: 请实现一个函数,检查一棵二叉树是否为二叉查找树.给定树的根结点指针TreeNode* root,请返回一个bool,代表该树是否为二叉查找树. 二.思路: 解法一:从根节点开始遍历二叉树, ...

  9. 哈夫曼树&semi;二叉树&semi;二叉排序树&lpar;BST&rpar;

    优先队列:priority_queue<Type, Container, Functional>Type 为数据类型, Container 为保存数据的容器,Functional 为元素比 ...

随机推荐

  1. Java Web技术之Cookie

    Cookie:它是服务器在获取到用户的请求之后,把用户的请求中的重要资源保存在这个对象中,在给用户响应的时候,把这个对象发给客户端.然后浏览器接收到这个Cookie之后,浏览器会自动的把Cookie中 ...

  2. 了解screen对象的常用视图属性

    前面的话 screen对象基本上只用来表明客户端的能力,其中包括浏览器窗口外部的显示器的信息,如像素高度和宽度等.每个浏览器中的screen对象都包含着各不相同的属性.本文将详细介绍screen对象的 ...

  3. JS学习笔记10&lowbar;Ajax

    1.Ajax概述 Asynchronous JavaScript + XML,支持js与服务器通信.在不unload页面的前提下从服务器获取新数据,以实现更好的用户体验(与传统的单击-等待交互不同的体 ...

  4. 最小生成树之prim

    prim是设置一个初始结点,寻找其周围最小的边权值,并将该结点作为初始结点,继续寻找现在结点周围的边权值的最小值,但要注意如果这次寻找的某个边权值没有上次的小的话仍然保留上一次的边权值,即lowcas ...

  5. CentOS 7 用户账户配置

    说明: 1.这篇博文记录的是CentOS 7 用户账户的配置,包括添加用户.添加用户组.删除用户.删除用户组等.其中包括分析用户的配置文件.目录以及对安全的思考. 2.用户配置方面CentOS 7与以 ...

  6. hdu4576 概率dp n&Hat;2的矩阵

    这个题目看网上好多题解都是直接O(n*m)卡过.我是这么做的. 对于m次操作,统计每个w的次数.然后对每个w做矩阵乘法. 这样直接做矩阵乘法是会TLE的. 又由于这里的矩阵很特殊,一次乘法可以降维成O ...

  7. Ubuntu 中使用 谷歌日历

    简介 对于经常使用待办类软件的人来说,谷歌日历是个不错的选择.但每次,都要登录网页去查看,对于我这样的懒人来说似乎麻烦了些. 所以在网上找了个叫做 Calendar Indicator 的软件. 效果 ...

  8. 小谷的战斗Jquery&lpar;三&rpar;--水平和垂直菜单

    日薪的例子似乎有点低,今天做多.行,这种实现是一个简单的菜单,Web项目中,有两个共同的菜单:纵向和横向.说到从垂直,看原代码. html代码实现最主要的菜单与子菜单 <span style=& ...

  9. 《JAVA程序设计与实例》记录与归纳--类与对象

    类与对象 概念贴士: 1. 类必须先定义了才能使用.类是创建对象的模板,创建对象也叫类的实例化. 2. 在Java中,使用new关键字来创建对象,一般有一下3个步骤: 1)声   明:声明一个对象,包 ...

  10. 【原创】Hibernate通过实体类自动建表时type&equals;MyISAM的问题

    ι 版权声明:本文为博主原创文章,未经博主允许不得转载. 当使用的mysql数据库为5.5版本时,方言需要设置为 <property name="hibernate.dialect&q ...