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

判断是不是平衡二叉树

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

/**
 * struct TreeNode {
 *	int val;
 *	struct TreeNode *left;
 *	struct TreeNode *right;
 * };
 */
/*
思路:
不为空:
    leftnum=计算当前节点的左孩子的深度(num函数)
    rightnum=计算当前节点的右孩子的深度(num函数)
    if(leftnum-rightnum!=1||leftnum==rightnum)//不满足
    return false
    使用递归处理子树的子树是不是平衡树
return ture


错误总结:
尽管想到了可以使用深度去进行比较,但是当处理子树的子树是不是平衡树时候,没有很好的利用递归去处理。
*/
#include <stdbool.h>
int leftnum=0,rightnum=0;
int num(struct TreeNode* pRoot)
{
    if(pRoot==NULL)return 0;
    leftnum=num(pRoot->left);
    rightnum=num(pRoot->right);
    if(leftnum>rightnum)
    {
        leftnum+=1;
        return leftnum;
    }
    else
    {
        rightnum+=1; 
        return rightnum;  
    }
    
}
/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param pRoot TreeNode类 
 * @return bool布尔型
 */
bool IsBalanced_Solution(struct TreeNode* pRoot ) {
    // write code here
    if(pRoot!=NULL){
    
    int res=num(pRoot->left)-num(pRoot->right);
    if(res>1 || res<-1)
        return false;
    if(IsBalanced_Solution(pRoot->left) && IsBalanced_Solution(pRoot->right))
    return true;
    else
    return false;;
    }
    return true;
}

全部评论

相关推荐

10-30 19:23
已编辑
山东大学(威海) C++
牛至超人:我了个雷 1.实习经历写太长了吧,精简一点,你写那么老多,面试官看着都烦 2.项目经历你放俩竞赛干啥单独拿出来写上几等奖就行了呗 3.一大雷点就是项目经历里的那个课程设计,大家都知道课程设计巨水,不要写课程设计,换一个名字,就叫学生管理系统,面试官问就说是自己做的项目,不要提课程设计的事 4.那个交流经历,简化一下塞到最上面的教育经历里就行了 5.简历尽量一页纸
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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