问题:链接
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.
解答:可以根据定义 采用递归的方式解答,但是递归次数太多容易超时,问题的关键在于如果快速的得到树的深度,而不是每次都遍历,这里采用的一个方法是同过isbalancde函数每次同时返回一个树的深度。
参考:http://zhedahht.blog.163.com/blog/static/25411174201142733927831/
代码:
*/
class Solution {
public:
bool isBalanced(TreeNode *root) {
int deep = 0;
return isBalanced(root, &deep);
}
bool isBalanced(TreeNode *root, int *deep)
{
if(root == NULL)
{
*deep = 0;
return true;
}
int left, right;
if(isBalanced(root->left, &left) && isBalanced(root->right, &right))
{
int diff = left - right;
if(diff <= 1 && diff >= -1)
{
*deep = 1 + (left > right? left:right);
return true;
}
}
return false;
}
};