题目:
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.
解答:
一开始看题目懵比了。后来一想,就是问树的左右子树高度相差是否 > 1。如果大于 1,可以记录数高为特殊高度(-1),逐层向上传递 -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:
int treeDepth(TreeNode* root)
{
if(root == NULL)
return 0;
else
{
int ldepth = treeDepth(root->left);
int rdepth = treeDepth(root->right);
if(ldepth == -1 || rdepth == -1) return -1;
int diff = fabs(ldepth - rdepth);
if(diff > 1) return -1;
else
{
return ((ldepth > rdepth)?ldepth: rdepth) + 1;
}
}
}
bool isBalanced(TreeNode* root) {
int ans = treeDepth(root);
if(ans == -1) return false;
else return true;
}
};