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

判断是不是平衡二叉树

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;
}
全部评论

相关推荐

点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-01 17:13
想去,但是听说加班强度实在难崩,所以拒绝了,现在有点心梗对面hr感觉也是实习生,打电话的时候怪紧张的,但是感觉人很好嘞
水中水之下水道的鼠鼠:哥们这不先去体验一下,不行再跑呗,大不了混个实习经历(有更好的转正offer就当我没说)
点赞 评论 收藏
分享
06-07 19:59
门头沟学院 C++
补药卡我啊😭:都快15年前的了还在11新特性
你的简历改到第几版了
点赞 评论 收藏
分享
龙珠传说:nb,公务员解约不需要支付违约金吧
点赞 评论 收藏
分享
07-01 19:00
门头沟学院 Java
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务