# 题目

输入一棵二叉树,判断该二叉树是否是平衡二叉树。

平衡二叉树:每个子树的深度之差不超过1

# 思路

后续遍历二叉树

在遍历二叉树每个节点前都会遍历其左右子树

比较左右子树的深度,若差值大于1 则返回一个标记 -1表示当前子树不平衡

左右子树有一个不是平衡的,或左右子树差值大于1,则整课树不平衡

若左右子树平衡,返回当前树的深度(左右子树的深度最大值+1)

# 代码

    function IsBalanced_Solution(pRoot) {
      return balanced(pRoot) != -1;
    }

    function balanced(node) {
      if (!node) {
        return 0;
      }
      const left = balanced(node.left);
      const right = balanced(node.right);
      if (left == -1 || right == -1 || Math.abs(left - right) > 1) {
        return -1;
      }
      return Math.max(left, right) + 1;
    }

# 考察点

  • 二叉树