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

判断是不是平衡二叉树

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

解题思路

  • 每个节点左右子树差 ≤ 1 → 平衡树
  • 任意一个节点左右子树差 > 1 → 非平衡树

代码思路

  • 定义一个求二叉树高度的函数depth
  • 先处理特殊情况,空树,为平衡树
  • root为根节点的左右子树差 ≤ 1 → 继续向下判断子树是否满足条件,直到树中每个节点都判断完成 → 确定为一颗平衡二叉树
  • root为根节点的左右子树差 > 1 → 非平衡

代码

/* function TreeNode(x) {
    this.val = x;
    this.left = null;
    this.right = null;
} */
// 求二叉树的深度
function depth(root){
    if(!root)
        return 0
    // 左树深度
    var l=depth(root.left);
    // 右树深度
    var r=depth(root.right);
    return Math.max(l,r)+1;
}
function IsBalanced_Solution(pRoot)
{
    // write code here
    // 先处理特殊情况,如果是一颗空树,则是平衡二叉树
    if(!pRoot)
        return true;
    // 左右树的差距
    let gap=Math.abs(depth(pRoot.left)-depth(pRoot.right));
    // 只有当,树中任意一个节点为根节点的左右树高度差小于1,才能确定是平衡树
    if(gap<=1)
        return IsBalanced_Solution(pRoot.left) && IsBalanced_Solution(pRoot.right);
    // 如果左右两树的差距大于1,则可肯定,不是平衡树
    else
        return false;
}
module.exports = {
    IsBalanced_Solution : IsBalanced_Solution
};
全部评论

相关推荐

不愿透露姓名的神秘牛友
07-09 12:05
点赞 评论 收藏
分享
认真搞学习:这么良心的老板真少见
点赞 评论 收藏
分享
Twilight_m...:表格简历有点难绷。说说个人看法: 1.个人基本情况里好多无意义信息,什么婚姻状况、健康状况、兴趣爱好、户口所在地、身份证号码、邮政编码,不知道的以为你填什么申请表呢。 2.校内实践个人认为对找工作几乎没帮助,建议换成和测开有关的项目,实在没得写留着也行。 3.工作经历完全看不出来是干什么的,起码看着和计算机没啥关系,建议加强描述,写点你在工作期间的实际产出、解决了什么问题。 4.个人简述大而空,看着像AI生成,感觉问题最大。“Python,C,C++成为我打造高效稳定服务的得力工具”、“我渴望凭借自身技术知识与创新能力,推动人工智能技术的应用发展,助力社会实现智能化转型”有种小学作文的美感。而且你确定你个人简述里写的你都会嘛?你AI这块写的什么“深入研究”,发几篇顶会的硕博生都不一定敢这么写。而且你AI这块的能力和软测也完全无关啊。个人简述建议写你对哪些技术栈、哪些语言、哪些生产工具的掌握,写的有条理些,而且最好是和测开强相关的。
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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