diff --git "a/110. \345\271\263\350\241\241\344\272\214\345\217\211\346\240\221.js" "b/110. \345\271\263\350\241\241\344\272\214\345\217\211\346\240\221.js" new file mode 100644 index 0000000..362f8b9 --- /dev/null +++ "b/110. \345\271\263\350\241\241\344\272\214\345\217\211\346\240\221.js" @@ -0,0 +1,32 @@ +/** + * 给定一个二叉树,判断它是否是高度平衡的二叉树。 + 本题中,一棵高度平衡二叉树定义为: + 一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。 + */ + +/** + * Definition for a binary tree node. + * function TreeNode(val, left, right) { + * this.val = (val===undefined ? 0 : val) + * this.left = (left===undefined ? null : left) + * this.right = (right===undefined ? null : right) + * } + */ +/** + * @param {TreeNode} root + * @return {boolean} + * 时间复杂度 O(n),空间复杂度 O(n) + */ +var isBalanced = function (root) { + return balanced(root) !== -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 +}