思路:依旧是递归,这里暂时只想到了比较笨的方法,就是对从上至下对当前结点的左右孩子,遍历得出它们高度,然后做差,判断是否满足平衡二叉树的条件; 想过动态规划和从下至上的思想,但技术没到位,没能实现出来,;
并不是根节点满足条件就是平衡二叉树,存在这样一种情况:
struct TreeNode
{
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
bool isBalanced(TreeNode *root)
{
if(root==NULL)
return true;
int l=Count(root->left,1);//得到左孩子的高度
int r=Count(root->right,1);//得到右孩子的高度
if(l-r>1||r-l>1)
return false;
return isBalanced(root->left) && isBalanced(root->right);//循环判断左孩子与右孩子是否满足条件
}
int Count(TreeNode* root,int count)//得到当前root结点高度
{
if(root==NULL)
return count;
int l=Count(root->left,count+1);
int r=Count(root->right,count+1);
return l>r?l:r;
}