1.问题描述
输入一棵二叉树的根结点,判断该树是不是平衡二叉树。如果某二叉树中任意结点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树。(来自《剑指offer》)
2.分析
我们可以采用后续遍历,在遍历根结点之前就可以得到左右子树的深度及是不是一颗平衡二叉树。然后在根据左右子树的深度差值来判断这棵树是不是一棵平衡二叉树。
3.代码
int IsBalanced(TreeNode* head,int* depth)
{
if (head == NULL)
{
*depth = 0;
return 1;
}
int left;
int right;
if (IsBalanced(head->lChild,&left) && IsBalanced(head->rChild,&right))
{
int diff = left - right;
if (diff <= 1 || diff >= -1)
{
*depth = left > right ? left + 1 : right + 1;
return 1;
}
}
return 0;
}