【问题描述】
一棵空树,或者是具有下列性质的二叉树:
(1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值;
(2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值;
(3)左、右子树也分别为二叉排序树;
(4)没有键值相等的结点。
已知该二叉树中的数据都是整型,请设计算法判断一棵二叉树是否为二叉排序树。
扩展二叉树用-1表示某结点没有左/右孩子,该二叉树的扩展二叉树如下图示
扩展二叉树的前序遍历序列是:10 7 4 -1 -1 8 -1 9 -1 -1 -1。
【输入形式】一行整数,该行是扩展二叉树的前序遍历序列,用于构造二叉树。
【输出形式】该二叉树中是否是二叉排序树。如果是二叉排序树输出“YES”,否则输出“NO”。
【样例输入】10 7 4 -1 -1 8 -1 9 -1 -1 -1
【样例输出】
YES
分析:
1.首先构建一棵二叉树
2.根据二叉排序树的性质写一个判断函数
3.通过函数判断是否为一颗二叉排序树
实现:
利用结构体构建结点 利用类构建树
struct BiNode
{
int data;
BiNode *rchild,*lchild;
};
class BiSortTree
{
public:
BiSortTree()
{
root=creat();
flag=true;
p=-256;
}
bool IsBST