1. 题目要求
输入一棵二叉树,判断该二叉树是否是平衡二叉树。
(平衡二叉树是任意节点的左右子树深度相差不超过1)
2. 解题思路
尽量不用暴力的思路,在每一个节点计算其左右节点的深度,会造成重复的浪费
用递归的思想
用后序遍历的方法,先遍历其左右子树,用一个left与right变量来记录
3. 代码
如果根节点为空,则为空树,也是平衡二叉树
如果左右子树是平衡二叉树,且左子树的深度和右子树的深度不超过1
那么depth 的值就增加
如果都不满足,返回false
class Solution {
public:
bool IsBalanced_Solution(TreeNode* pRoot) {
int depth = 0;
return IsBalance(pRoot,&depth);
}
private:
bool IsBalance(TreeNode* pRoot,int *depth)
{
if(pRoot == NULL)
{
*depth = 0;
return true;
}
int left = 0;
int right = 0;
int diff = 0;
if(IsBalance(pRoot->left,&left)&&IsBalance(pRoot->right,&right))
{
diff = left-right;
if(diff<=1&&diff>=-1)
{
//*depth = 1 +(left>right?left:right);
*depth = left>right?++left:++right;
return true;
}
}
return false;
}
};