判断二叉树是否二叉排序树(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 }
手与大脑的距离决定了理想与现实的相似度