题目名称:平衡二叉树
输入一棵二叉树的根节点,判断该树是不是平衡二叉树。如果某二叉树中任意节点的左右子树的深度相差不超过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
说明
- 本题解已同步leetcode-js-simple/17.[ 剑指 Offer 55 - II ] 平衡二叉树,可以复制代码进行调试。
- 总结出了一套亲测有效的前端无痛刷题项目,有助于算法小白平稳入门,详见leetcode-js-roadmap,希望对从零开始刷题的前端小伙伴们带来帮助~
本文正在参与「掘金 2021 春招闯关活动」, 点击查看 活动详情