给定一个二叉树,判断它是否是 平衡二叉树
题解:平衡二叉树 是指该树所有节点的左右子树的深度相差不超过 1。可以采用递归遍历每一个节点,得到其高度,在判断高度时不可避免的要用到其左右子树的高度,所以可以顺便判断出左右子树的高度相差是否大于1,若大于1,则该节点不是平衡的,整个子树也就不是平衡的。
代码如下:
class Solution {
public:
int GetHeight(TreeNode* cur){
if(cur==NULL) return 0;
int LeftHeight = GetHeight(cur->left);
if(LeftHeight==-1) return -1;
int RightHeight = GetHeight(cur->right);
if(RightHeight==-1) return -1;
return abs(LeftHeight- RightHeight)>1? -1:1+max(LeftHeight,RightHeight);
}
bool isBalanced(TreeNode* root) {
return GetHeight(root) == -1? false:true;
}
};
注意:
其中对节点的左右子树高度递归判断有漏洞,因为在递归的单层逻辑里对左右两个方向都做了判断,所以int LeftHeight = GetHeight(cur->left);这一语句是正确的判断整个左子树的情况,而不是单线的左子树。