额。。。代码不是很漂亮,递归查看每棵子树是否是平衡树。以当前节点为根的子树是平衡树的条件是左右子树都是平衡树,并且两者的高度差不超过1.
原先在纠结怎么一边传树的高度,一边判断是否是AVL。然后发现。。。可以传引用进去!这样每次都可以回溯得到子树的高度,又可以进行判断。
/**
* 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 help(TreeNode* root,int &height)
{
if(!root) {height=0;return true;}
int l,r;
int x=help(root->left,l);
int y=help(root->right,r);
height=max(l,r)+1;
if(!l&&!r) return true;
if(!l) return (r>1)?false:true;
if(!r) return (l>1)?false:true;
return x&&y&&(abs(l-r)<=1);
}
bool isBalanced(TreeNode* root)
{
if(!root) return true;
int h;
return help(root,h);
}
};