zoukankan      html  css  js  c++  java
  • 判断二叉树是否二叉排序树(BST)

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

    代码如下:

     1 #include <stack>
     2 using namespace std;
     3 
     4 typedef struct BinaryTree
     5 {
     6     int data;
     7     BinaryTree *lc;
     8     BinaryTree *rc;
     9 }BTNode,*BinaryTree;
    10 
    11 bool isBST(BinaryTree T)
    12 {
    13     int prevalue = INT_MIN; //获取最小整型数,初始化prevalue
    14     stack<BinaryTree> s;
    15     BinaryTree p = T;
    16     while(p||!s.empty())
    17     {
    18         if(p)
    19         {
    20             s.push(p);
    21             p = p->lc;
    22         }
    23         else
    24         {
    25             p=s.top();
    26             s.pop();
    27             if(prevalue>p->data)    //判断前一个结点的值是否不满足二叉排序树的条件
    28                 break;//跳出循环,早外面判断
    29             prevalue = p->data;
    30             p = p->rc;
    31         }
    32     }
    33     if(!p && s.empty())
    34         return true;
    35     else
    36         return false;
    37 }

    也可以用递归实现

    代码如下:

     1 typedef struct BinaryTree
     2 {
     3     int data;
     4     BinaryTree *lc;
     5     BinaryTree *rc;
     6 }BTNode,*BinaryTree;
     7 
     8 int prevalue = INT_MIN; //获取最小整型数,初始化prevalue
     9 bool isBST(BinaryTree T)
    10 {
    11     bool b1,b2;
    12     if(!T)
    13         return true;
    14     else
    15     {
    16         b1 = isBST(T->lc);
    17         if(b1 ==false||prevalue>T->data)
    18             return false;
    19         prevalue = T->data;
    20         b2 = isBST(T->rc);
    21         return b2;
    22     }
    23 }
  • 相关阅读:
    【学习】018 Spring框架
    【学习】017 Mybatis框架
    【学习】016 MySQL数据库优化
    【学习】 015 Linux相关
    【学习】014 深入理解Http协议
    【学习】013 Servlet、Cookie、Session的简述
    js 异常判断
    CSS 文字概念小记
    Echarts tooltip 坐标值修改
    js 查找当前元素/this
  • 原文地址:https://www.cnblogs.com/houjun/p/4861656.html
Copyright © 2011-2022 走看看