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.
» Solve this problemComplexity: O(n)
/** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { public: bool isBalanced(TreeNode *root) { // Start typing your C/C++ solution below // DO NOT write int main() function int rootDepth = 0; return _isBalanced(root, rootDepth); } bool _isBalanced(TreeNode *root, int& depth) { if (!root) return true; int leftDepth = depth + 1; int rightDepth = depth + 1; bool subTreeResult = _isBalanced(root->left, leftDepth) && _isBalanced(root->right, rightDepth); //trigger recursion first to avoid computation of depth //until we reach the leaf node depth = max(leftDepth, rightDepth); //recursively update parent depth, bottom-up if (subTreeResult && abs(leftDepth - rightDepth) <= 1) { return true; } else { return false; } } };
No comments:
Post a Comment