判断一棵树是否为二叉排序树的两种方法
2009-10-15 22:28
288 查看
一、使用先根遍历,判断大小关系是否正确:t->lchild->value<t->value<t->rchild->value
bool Judge(PBinTree pbt)
{
PBinTreeNode pLeft, pRight;
bool bLeft = false, bRight=false, bRootl=false, bRootr=false;
if(pbt == NULL)
return true;
// 判断根节点
pLeft = pbt->left;
pRight = pbt->right;
if((pLeft && pLeft->data <= pbt->data)||pLeft==NULL)
{
bRootl = true;
}
if((pRight && pRight->data >= pbt->data)||pRight==NULL)
{
bRootr = true;
}
// 判断左右子树
bLeft = Judge(pLeft);
bRight = Judge(pRight);
// 同时满足条件才叫二叉排序树
return( bLeft && bRight && bRootl && bRootr);
}
二、如果二叉树为二叉排序树,那么中序遍历该树应该输出有序结果,每次输出的值应该比其前驱的值要大,否则不是二叉排序树
int last=0,flag=1;
int Is_BSTree(Bitree T)//判断二叉树T是否二叉排序树,是则返回1,否则返回0
{
if(T->lchild&&flag) Is_BSTree(T->lchild);
if(T->data<last) flag=0; //与其中序前驱相比较
last=T->data;
if(T->rchild&&flag) Is_BSTree(T->rchild);
return flag;
}
bool Judge(PBinTree pbt)
{
PBinTreeNode pLeft, pRight;
bool bLeft = false, bRight=false, bRootl=false, bRootr=false;
if(pbt == NULL)
return true;
// 判断根节点
pLeft = pbt->left;
pRight = pbt->right;
if((pLeft && pLeft->data <= pbt->data)||pLeft==NULL)
{
bRootl = true;
}
if((pRight && pRight->data >= pbt->data)||pRight==NULL)
{
bRootr = true;
}
// 判断左右子树
bLeft = Judge(pLeft);
bRight = Judge(pRight);
// 同时满足条件才叫二叉排序树
return( bLeft && bRight && bRootl && bRootr);
}
二、如果二叉树为二叉排序树,那么中序遍历该树应该输出有序结果,每次输出的值应该比其前驱的值要大,否则不是二叉排序树
int last=0,flag=1;
int Is_BSTree(Bitree T)//判断二叉树T是否二叉排序树,是则返回1,否则返回0
{
if(T->lchild&&flag) Is_BSTree(T->lchild);
if(T->data<last) flag=0; //与其中序前驱相比较
last=T->data;
if(T->rchild&&flag) Is_BSTree(T->rchild);
return flag;
}
相关文章推荐
- 判断一棵树是否为二叉排序树的两种方法
- js判断字符是否是汉字的两种方法小结
- php判断变量是否是整数的两种方法
- 【PE】判断一个线程是否执行结束的两种方法
- Java判断单链表是否有环的两种实现方法
- 判断任意两台计算机的IP地址是否属于同一子网络的两种地址转换方法
- 两种不同方法判断Excel表格中是否存在指定数值
- js判断url是否有效的两种方法
- 判断一个字符是否为数字的两种方法(C/C++)
- java中判断字符串是否为数字的两种方法
- Android开发:判断sdCard是否已安装的两种方法
- 笔试,面试,C/C++,判断单链表是否带环?若带环,求环长度,求环入口点(两种方法)
- C# 判断窗体是否打开 如果打开激活窗体 两种方法
- 判断单链表是否有环的两种方法(转)
- js判断url是否有效的两种方法
- JAVA 中两种判断输入的是否是数字的方法
- [C#.Net]判断文件是否被占用的两种方法
- Android 判断当前线程是否是主线程的两种方法
- 在进行C#编程时候,有的时候我们需要判断一个字符串是否是数字字符串,我们可以通过以下两种方法来实现。 【方法一】:使用 try{} catch{} 语句。 我们可以在try语句块中试图