判断二叉树是否二叉排序树(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 }

 

posted @ 2015-10-08 17:35  HOU_JUN  阅读(2464)  评论(0编辑  收藏  举报