[LeetCode] 110. Balanced Binary Tree
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 depth of the two subtrees of every node never differ by more than 1.
Thought process:
Divide and conquer. We can build the solution on top of "104. Maximum Depth of Binary Tree". The idea is to use a function called getDepth, which returns the depth of a tree node. We then compare the depths of a node's left subtree and right subtree. There are two cases:
- Tree is balanced. Return maximum depth of the node.
- Otherwise, return -1 to signal calling function that tree is not balanced.
Solution:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ public class Solution { public boolean isBalanced(TreeNode root) { return getDepth(root) != -1; } private int getDepth(TreeNode root) { if (root == null) { return 0; } int leftDepth = getDepth(root.left); int rightDepth = getDepth(root.right); if (leftDepth == -1 || rightDepth == -1 || Math.abs(leftDepth - rightDepth) > 1) { return -1; } else { return Math.max(leftDepth, rightDepth) + 1; } } } |
Time complexity: O(n).
Comments
Post a Comment