Height Balanced
Question
Given a binary tree, determine if it is height-balanced.
For this problem, a height-balanced binary tree is defined as:
a binary tree in which the left and right subtrees of every node differ in height by no more than 1.
https://leetcode.com/problems/balanced-binary-tree/
input:
graph TD;
1-->3;
1-->2;
3-->4;
3-->8;
Output:
true
Solution
Javascript
function heightBalancedBinaryTree(tree) {
// Write your code here.
let dfs = function (node) {
if (!node) return 0;
let left = 1 + dfs(node.left);
let right = 1 + dfs(node.right);
if (Math.abs(left - right) > 1) return Infinity;
return Math.max(left, right);
};
return dfs(tree) == Infinity ? false : true;
}
//94ms
function heightBalancedBinaryTree(tree) {
// Write your code here.
return helper(tree) != -1;
}
function helper(node) {
if (!node) return 0;
let left = helper(node.left);
if (left == -1) return -1;
let right = helper(node.right);
if (right == -1) return -1;
if (Math.abs(left - right) > 1) return -1;
return Math.max(left, right) + 1;
}
//144ms
class TreeInfo {
constructor(isBalanced, height) {
this.isBalanced = isBalanced;
this.height = height;
}
}
function heightBalancedBinaryTree(tree) {
const treeInfo = helper(tree);
return treeInfo.isBalanced;
}
function helper(node) {
if (!node) return new TreeInfo(true, -1);
let left = helper(node.left);
let right = helper(node.right);
const isBalanced =
left.isBalanced &&
right.isBalanced &&
Math.abs(left.height - right.height) <= 1;
const height = Math.max(left.height, right.height) + 1;
return new TreeInfo(isBalanced, height);
}
// 199 ms
Java
Concepts
Patterns
- DFS