题目描述
输入一棵二叉树,判断该二叉树是否是平衡二叉树。
思路:平衡二叉树要么为空树要么左右子树高度差小于等于1,后序遍历,每遍历到一个节点的时候我们已经遍历了该节点的左右子树,只要在遍历每个节点的时候记录他的深度,就可以一边遍历一边判断该节点是不是平衡的。
class Solution {
public:
bool IsBalanced_Solution(TreeNode* pRoot) {
int depth=0;
return IsBalanced_Solution_Core(pRoot, depth);
}
bool IsBalanced_Solution_Core(TreeNode* pRoot,int &depth)
{
if(!pRoot)
{
depth=0;
return true;
}
int l,r;
if(IsBalanced_Solution_Core(pRoot->left,l)&&IsBalanced_Solution_Core(pRoot->right,r))
{
int diff = l-r;
if(diff>1||diff<-1)
return false;
else
{
depth = (l>r?l:r)+1;
return true;
}
}
return false;
}
};