【 声明:版权所有,转载请标明出处,请勿用于商业用途。 联系信箱:libin493073668@sina.com】
题目描述
输入一棵二叉树,判断该二叉树是否是平衡二叉树。
思路
最容易想到的思路应该就是对于每个结点的左子树和右子树都用递归统计其深度,但是这样的做法会带来大量无谓的访问操作,效率实在不敢恭维
而我们可以优化,使得每个结点都只访问一次,这个时候我们只需要添加一个记录深度的变量即可
/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};*/
class Solution
{
public:
bool IsBalanced_Solution(TreeNode* pRoot)
{
int depth=0;
return IsBalanced(pRoot,&depth);
}
bool IsBalanced(TreeNode *pRoot,int *depth)
{
if(pRoot==nullptr)
{
*depth = 0;
return true;
}
int left,right;
if(IsBalanced(pRoot->left,&left) && IsBalanced(pRoot->right,&right))
{
int dif = left-right;
if(dif>=-1 && dif<=1)
{
*depth = 1+(left>right?left:right);
return true;
}
}
return false;
}
};