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.左右子树分别平衡 2.左右子树的高度差不超过1
如果对于每棵子树root都使用getHeight来计算root->left和root->right的高度,然后再判断root是否平衡,则会对树扫描多次,即一个节点的深度是几,那它就会被扫几次。所以这样效率太低。
因此,使用height函数,对树只扫描一次,便可得到其高度和平衡性。用一个引用变量来记录其平衡与否。
class Solution {
public:
bool isBalanced(TreeNode *root) {
if(root==NULL)
return true;
bool shit;
height(root,shit);
return shit;
}
int height(TreeNode* root,bool &balance){
if(root==NULL){
balance = true;
return 0;
}
bool bal,bar;
int left = height(root->left,bal);
int right = height(root->right,bar);
balance = bal&&bar&&abs(left-right)<=1;
return 1+max(left,right);
}
};