[ 剑指 Offer 55 - II ] 平衡二叉树 | 刷题打卡

156 阅读1分钟

题目名称:平衡二叉树

题目地址:leetcode-cn.com/problems/pi…

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

示例 1:


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

    3
   / \
  9  20
    /  \
   15   7
返回 true

示例 2:

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

       1
      / \
     2   2
    / \
   3   3
  / \
 4   4
返回 false

解法

  • 自顶向下逐个比较并备忘录剪枝

递归+备忘录剪枝

/**
 * @param {TreeNode} root
 * @return {boolean}
 */
const map = new Map()
var isBalanced = function (root) {
  if (!root) return true
  return Math.abs(getDep(root.left) - getDep(root.right)) <= 1 && isBalanced(root.left) && isBalanced(root.right)
  function getDep(node) {
    if (!node) return 0
    if (map.get(node)) return map.get(node)
    const maxDep = Math.max(getDep(node.left), getDep(node.right)) + 1
    map.set(node, maxDep)
    return maxDep
  }
};

总结

  • 查找深度问题基本都可以采用DFS

说明

  1. 本题解已同步leetcode-js-simple/17.[ 剑指 Offer 55 - II ] 平衡二叉树,可以复制代码进行调试。
  2. 总结出了一套亲测有效的前端无痛刷题项目,有助于算法小白平稳入门,详见leetcode-js-roadmap,希望对从零开始刷题的前端小伙伴们带来帮助~

本文正在参与「掘金 2021 春招闯关活动」, 点击查看 活动详情