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

判断是不是平衡二叉树

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

相关推荐

不愿透露姓名的神秘牛友
11-26 18:54
说等下个版本吧的发呆爱好者很贪睡:佬最后去了哪家呀
点赞 评论 收藏
分享
沉淀一会:1.同学你面试评价不错,概率很大,请耐心等待; 2.你的排名比较靠前,不要担心,耐心等待; 3.问题不大,正在审批,不要着急签其他公司,等等我们! 4.预计9月中下旬,安心过节; 5.下周会有结果,请耐心等待下; 6.可能国庆节前后,一有结果我马上通知你; 7.预计10月中旬,再坚持一下; 8.正在走流程,就这两天了; 9.同学,结果我也不知道,你如果查到了也告诉我一声; 10.同学你出线不明朗,建议签其他公司保底! 11.同学你找了哪些公司,我也在找工作。
点赞 评论 收藏
分享
一名愚蠢的人类:多少games小鬼留下了羡慕的泪水
投递荣耀等公司10个岗位
点赞 评论 收藏
分享
评论
1
收藏
分享
牛客网
牛客企业服务