判断是否是二叉排序树、平衡二叉树|树

判断是否是二叉排序树:
下面采用采用两种方法,1.递归的进行判断。2.用中序遍历判断。
后更:第一种方法实际上是错误的,按照[5,3,0,0,1,6]这棵树用这个方法判断出来是二叉排序树,但是实际上却是错误的。

bool JudgeTree1(BiTree Tree)
{
    if (Tree==NULL)
    {
        return true;
    }

    if (Tree->lchild==NULL)
    {
        return true;
    }
    else if ((Tree->data)<(Tree->lchild->data))
    {
        return false;
    }

    if (Tree->rchild==NULL)
    {
        return true;
    }
    else if((Tree->data)>(Tree->rchild->data))
    {
        return false;
    }

    if (JudgeTree1(Tree->lchild)==false)
    {
        return false;
    }

    if (JudgeTree1(Tree->rchild)==false)
    {
        return false;
    }

    return true;
}

//中序遍历
static ElemType Num = INT_MIN;
bool JudgeTree2(BiTree Tree,ElemType *pNum = &Num)
{
    if (Tree==NULL)
    {
        return true;
    }
        
    JudgeTree2(Tree->lchild,pNum);
    if (Tree->data>(*pNum))
    {
        (*pNum) = Tree->data;
    }
    else
    {
        return false;
    }
    JudgeTree2(Tree->rchild,pNum);
}

判断是否是平衡二叉树:
判断大小,一个个节点判断,同上方法1;
判断平衡因子,自底向上一边积累树的高度一边计算差值。

int JudgeAVL(BiTree Tree,bool *Result)
{
    if (Tree==NULL||(*Result)==false)
    {
        return 0;
    }

    //判断大小关系对不对
    if (Tree->lchild!=NULL)
    {
        if ((Tree->data)<(Tree->lchild->data))
        {
            (*Result)=false;
            return 0;
        }
    }

    if (Tree->rchild!=NULL)
    {
        if((Tree->data)>(Tree->rchild->data))
        {
            (*Result)=false;
            return 0;
        }
    }

    int L_High,R_High;
    L_High  = JudgeAVL(Tree->lchild,Result);
    R_High  = JudgeAVL(Tree->rchild,Result);
    if (abs(L_High-R_High)>=2)
    {
        (*Result) = false;
    }
    
    return getMax(L_High,R_High)+1;
}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 树的概述 树是一种非常常用的数据结构,树与前面介绍的线性表,栈,队列等线性结构不同,树是一种非线性结构 1.树的定...
    Jack921阅读 4,489评论 1 31
  • 数据结构与算法--从平衡二叉树(AVL)到红黑树 上节学习了二叉查找树。算法的性能取决于树的形状,而树的形状取决于...
    sunhaiyu阅读 7,685评论 4 32
  • 0. 什么是树 数据的基本单位是数据元素,在涉及到数据处理时数据元素之间的关系称之为结构,我们依据数据元素之间关系...
    安安zoe阅读 499评论 0 0
  • 一直以来,我都很少使用也避免使用到树和图,总觉得它们神秘而又复杂,但是树在一些运算和查找中也不可避免的要使用到,那...
    24K男阅读 6,782评论 5 14
  • 二叉树-你必须要懂!(二叉树相关算法实现-iOS) http://www.cnblogs.com/manji/p/...
    汉秋阅读 1,878评论 0 16