判断一棵树是否为二叉排序树的两种方法

一、使用先根遍历,判断大小关系是否正确:t->lchild->valuevaluerchild->value

转自:http://blog.pfan.cn/boxer/4814.html

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); } 

 

这种方法主要是根据二叉排序树的定义来实现的。

 

二、如果二叉树为二叉排序树,那么中序遍历该树应该输出有序结果,每次输出的值应该比其前驱的值要大,否则不是二叉排序树

转自:http://topic.csdn.net/t/20040113/21/2661487.html 【8楼】

int last=0,flag=1; int Is_BSTree(Bitree T)//判断二叉树T是否二叉排序树,是则返回1,否则返回0 { if(T->lchild&&flag) Is_BSTree(T->lchild); if(T->datadata; if(T->rchild&&flag) Is_BSTree(T->rchild); return flag; } 

 

这种方法主要利用的是二叉排序树的性质特点。

 

 

你可能感兴趣的:(判断一棵树是否为二叉排序树的两种方法)