中序遍历完成
问题分析:
利用二叉搜索树的性质:所有左子树的键值小于根结点,所有右子树的键值大于根结点。
引入一个全局指针B
中序遍历完成主要依赖:左子树<根结点<右子树,先判断左子树与根结点的大小,此时B是左子树T是根结点,再判断根结点与右子树此时B为根结点,T为右子树。
BinTree B;
bool Is_BST(BinTree T)
{
if(T){
if(!Is_BST(T->Left)) return false:
if(B && B->Data>T->Data) return false;
B=T;
if(!Is_BST(T->Right)) return false;
}
return true;
}
可能会有疑问要所有左子树键值都小于根结点,如何确保每次比较B的Data就一定是最大的那个呢?
答:因为是中序,B依次是左子树,根结点,右子树,故返回上层结点时的B是下层右子树,应为二叉搜索树的性质,B的Data一定为目前最大的。