题目描述:

输入一棵二叉树的根节点,判断该树是不是平衡二叉树。如果某二叉树中任意节点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树。

示例 1:

给定二叉树 [3,9,20,null,null,15,7]

  1. 3<br /> / \<br /> 9 20<br /> / \<br /> 15 7<br />返回 true

示例 2:

给定二叉树 [1,2,2,3,3,null,null,4,4]

   1<br />      / \<br />     2   2<br />    / \<br />   3   3<br />  / \<br /> 4   4<br />返回 false 。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/ping-heng-er-cha-shu-lcof


知识点:

  • 深度优先遍历

解题思路:

  • 这道题目要求判断一棵树是否为平衡二叉树,平衡二叉树的条件为其每一个节点的左右子树的最大深度小于1
  • 对于关于二叉树深度的题我们优先想到的便是深度优先遍历,我们每递归便要判断一次最大深度是否大于1
  • 递归的返回条件为如果不存在我返回0,每次返回左右子树中深度最深的

解题代码:

function IsBalanced_Solution(pRoot)
{
    // write code here
    if(!pRoot) {
        return true;
    }
    let res = true;
    const dfs = (node) => {
        if(!node) return 0;
        let left = dfs(node.left) + 1;
        let right = dfs(node.right) + 1;
        if(Math.abs(left - right) > 1) {
            res = false;
        }
        return Math.max(left,right);
    }
    dfs(pRoot);
    return res;
}