简单说下平衡二叉树如何判断一颗树是否处于平衡状态。

以当前根节点为参照,左右子树的深度差不超过1。

代码实现

//判断树是否为平衡二叉树(1:是 0:不是)
//优化版本(不用遍历重复的结点)
int IsBlancedTree_op(BTNode* root, int *pdepth)
{
    if (root == NULL)
    {
        *pdepth = 0;
        return 1;
    }
    //按照后序遍历去判断,先判断左右子树,然后记录以当前结点为根树的深度
    int left, right;
    if (IsBlancedTree_op(root->_left, &left) && IsBlancedTree_op(root->_right, &right))
    {
        int gap = right - left;
        if (gap <= 1 && gap >= -1)
        {
            *pdepth = left>right ? left + 1 : right + 1;
            return 1;
        }
    }
    return 0;
}

 

posted @ 2021-07-17 17:20  *乐途*  阅读(81)  评论(0)    收藏  举报