自顶向下
一棵二叉树为「平衡二叉树」的条件为:该树为空树,或者其左右子树的高度差最大为1。因此,判断一棵二叉树是否平衡需要求其子树高度,并比较左右子树高度差。
因此此题的解题步骤如下:
- 设计「求二叉树高度」的函数
getHeight(root)
,作用是求以root为根结点的二叉树高度; - 遍历原二叉树,对其每个结点调用
getHeight(root)
函数,若存在某左右子树的高度差大于等于2,则是不平衡的;否则是平衡二叉树。
求取二叉树高度的思路如图所示。
class Solution {
public:
bool IsBalanced_Solution(TreeNode* Root) {
//空子树,是平衡二叉树
if(!Root) return true;
int leftHeight=getHeight(Root->left);//分别求左子树高度
int rightHeight=getHeight(Root->right);//和右子树高度
//左右子树高度之差大于1,faslse
if(abs(leftHeight-rightHeight)>1) return false;
//递归判断左右子树
return IsBalanced_Solution(Root->left)&&IsBalanced_Solution(Root->right);
}
//求子树高度
int getHeight(TreeNode* Root)
{
if(!Root) return 0;//空子树
if(!Root->left&&!Root->right) return 1;//叶子结点
return 1+max(getHeight(Root->left),getHeight(Root->right));
}
};