确定二叉树是否为二叉排序树

电脑杂谈  发布时间:2020-04-10 15:21:01  来源:网络整理

排序二叉树的删除_二叉排序树是_树和二叉树的转换

这是我对算法的第一个想法:

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)
     {
          bRootl = true;
     }
     else
     {
           return false;
     }
     if(pRight && pRight->data >= pbt->data)
     {
          bRootr = true;
     }
     else
     {
          return false;
     }
     // 判断左右子树
     bLeft = Judge(pLeft);
     bRight = Judge(pRight);
     // 同时满足条件才叫二叉排序树
     return( bLeft && bRight && bRootl && bRootr);
}

二叉排序树是_树和二叉树的转换_排序二叉树的删除

但是无法处理

400

二叉排序树是_树和二叉树的转换_排序二叉树的删除

200600

100900500700

二叉排序树是_排序二叉树的删除_树和二叉树的转换

这种情况

应该是这样的算法

typedef   struct   node{ 
    int   data; 
    struct   node   *left,   *right; 
}NODE; 
int   judge(NODE   *p,   int   leftbound,   int   rightbound)   { 
    if   (p==NULL)   return   1; 
    if   (p-> data   <   leftbound   ||   p-> data   >   rightbound)   return   0;//不要等号 
    if   (!judge(p-> left,leftbound,p-> data))   return   0; 
    if   (!judge(p-> right,   p-> data,rightbound))   return   0; 
    return   1; 
}

根值是value,则左子树值小于根,右子树值大于根. 也就是说,左子树的值(-maxint二叉排序树是,value)范围,右子树的值是(value,maxint).

被称为法官(root,-maxint二叉排序树是,maxint)


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-170740-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...