在不熟悉递归的情况下,用了两次递归完成了这道题。以作纪念。
class Solution
{
//解决过程两次用到递归,完美、快速地解决了这道题;首先一个求高度的函数这个函数要用到递归;之后在主函数里面,比较两个子树的高度差,如果二者平衡,也要继续分别递归二者;
public:
bool isBalanced(TreeNode* root)
{
if (root == NULL)
return true;
int delta = abs(TreeHeight(root->left) - TreeHeight(root->right));
if (delta>1)
return false;
else
return (isBalanced(root->left) && isBalanced(root->right));
}
private:
// 计算以root为根节点的树的高度,用递归
int TreeHeight(TreeNode* root)
{
if (root == NULL)
return -1;
else if(!root->left && !root->right)
return 0;
else
return 1+max(TreeHeight(root->left), TreeHeight(root->right));
}
};