题解 | #判断是不是平衡二叉树#

判断是不是平衡二叉树

http://www.nowcoder.com/practice/8b3b95850edb4115918ecebdf1b4d222

C语言判断平衡二叉树

  1. 思路:明显的递归问题,平衡二叉树左右子树的差值不大于1,因此应该递归所有的节点,判断节点的左右子树深度差值
  2. 重点:重点是递归函数的返回值,返回节点的最大深度,同时判断左右子树哪个最深,返回最深的值
  3. 递归出口:叶子节点作为出口,出口可以设置为两个,一个是叶子节点(针对的是没有左右孩子的节点),另一个是空节点(针对的是父节点只有一个孩子的节点)。当然也可以只给一个空节点的出口函数但是要多递归一层。
 * struct TreeNode {
 *	int val;
 *	struct TreeNode *left;
 *	struct TreeNode *right;
 * };
 *
 * C语言声明定义全局变量请加上static,防止重复定义
 */

/**
 * 
 * @param pRoot TreeNode类 
 * @return bool布尔型
 */
 //静态变量flag 标志是否平衡二叉树
static int flag=0;
//二叉树深度判断函数
int judge_AVL(struct TreeNode* pRoot){
//递归两个出口
    if(pRoot==NULL)
        return 0;
    if(pRoot->left==NULL && pRoot->right==NULL)
        return 1;
    //左孩子的深度
    int ldepth=judge_AVL(pRoot->left);
    //右孩子的深度
    int rdepth=judge_AVL(pRoot->right);
    //判断左右孩子深度差值大于1,非平衡二叉树,flag设置1
    if(abs(ldepth-rdepth)>1){
        flag=1;
        return 0;
    }
    //返回左右孩子最深的深度
    if(ldepth>rdepth)
        return ldepth+1;
    else 
        return rdepth+1;    
    
}
bool IsBalanced_Solution(struct TreeNode* pRoot ) {
    if(pRoot==NULL)
        return true;
    judge_AVL(pRoot);
    if(flag==0)
        return true;
    else 
        return false;
}
全部评论

相关推荐

巧克力1:双选会不如教室宣讲会
点赞 评论 收藏
分享
评论
1
收藏
分享
牛客网
牛客企业服务