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.
//Definition for a binary tree node. struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) {} }; //解決思路:利用兩個遞歸,一個遞歸求樹的高度,另一個遞歸求左右樹是否平衡。 class Solution { public: bool isBalanced(TreeNode* root) { if (root == NULL) { return true; } else { int lH = getHeight(root->left); int rH = getHeight(root->right); if (lH - rH <= 1 && lH - rH >= -1) { return isBalanced(root->left) && isBalanced(root->right); } else return false; } } int getHeight(TreeNode* root){ if (root == NULL) { return 0; } else { if (root->left == NULL) { return getHeight(root->right) + 1; } else if (root->right == NULL) { return getHeight(root->left) + 1; } else { int l = getHeight(root->left); int r = getHeight(root->right); return l < r ? (r + 1) : (l + 1); } } } };